A. 第十三屆全國青少年信息學奧林匹克聯賽(普及組c語言)的答案
NOIP2007年普及組(C語言)參考答案與評分標准
一、單項選擇題:(每題1.5分)
1. D 2. D 3. C 4. B 5. B 6.B 7. B 8. C
9. C 10. A
11. C 12. A 13. A 14. A 15. B 16. D 17. C 18. D
19. A 20. A
二、問題求解:(每題 5分)
1.90
2.210
三、閱讀程序寫結果
1. 15, 46(對1個數給4分,無逗號扣1分)
2. 3, 6
3. 2 3 5 7 11 13 17 19 23 29
31 37 41 43 47
4. wer2345defgh45456782qqq
四、完善程序(前4空(①--④),每空2.5分,後6空(⑤--⑩),每空3分)
(說明:以下各程序填空可能還有一些等價的寫法,各省可請本省專家審定和上機驗證,不一定上報科學委員會審查)
1.① c
② i
③ i++,j--
④ reverse(line)
2. ⑤ return
⑥ dr<tr+s && dc<tc+s
⑦ chessboard(tr,tc,tr+s-1,tc+s-1,s)
⑧ chessboard(tr,tc+s,tr+s-1,tc+s,s)
⑨ chessboard(tr+s,tc,tr+s,tc+s-1,s)
⑩ chessboard(tr+s,tc+s,tr+s,tc+s,s)
B. 求第十四屆信息學奧賽聯賽普及組c語言初賽試題 第三大題第2,3題的解析
2,3,1
遞歸一次,輸入參數循環左移至第一個數小於等於第二個數然後輸出
5 4 10 1 6 22 -59 -16 -11 -6
將數組中正數與負數分開排列,從數組起始開始檢測非整數數,從數組末尾檢測非負數,然後將這兩個數調換位置
最後一個遞歸沒時間分析了,下午有事要出門了
C. 求NOIP C語言 普及組 初賽模擬試題 急!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
信息學奧林匹克聯賽初賽模擬試題
(普及組 C語言 二小時完成)
一、選擇一個正確答案代碼(A/B/C/D/E),填入每題的括弧內(每題1.5分,共30分)
1.在計算機科學領域,提出「程序=數據結構+演算法」的是( )。
A、D.Ritchie B、N.Wirth C、Von Neumann D、Alan Turing E、B.Kernighan
2.下列哪個是最早的計算機程序設計語言( )。
A、C++ B、Java C、FORTRAN D、PASCAL E、COBOL
3.下列軟體不是資料庫處理軟體的是( )。
A、DB2 B、FoxPro C、Foxmail D、Oracle E、Sybase
4.下列哪個公司是生產CPU(中央處理器)的主要公司( )。
A、 Seagate B、AMD C、KINGSTONE D、BENQ E、Sony
5.在微型計算機中,微處理器的主要功能是進行( )。
A、算術邏輯運算及全機的控制
B、邏輯運算
C、算術邏輯運算
D、算術運算
6.DRAM存儲器的中文含義是( )。
A、靜態隨機存儲器
B、動態只讀存儲器
C、靜態只讀存儲器
D、動態隨機存儲器
7.操作系統的主要功能是( )。
A、控制和管理計算機系統軟硬體資源
B、對匯編語言、高級語言和甚高級語言程序進行翻譯
C、管理用各種語言編寫的源程序
D、管理資料庫文件
8.在Windows中,將某個應用程序窗口最小化之後,該應用程序( )。
A、仍在後台運行 B、暫時停止運行 C、完全停止運行 D、出錯
9.網路互聯實現在更大的范圍內傳輸數據和共享資源,要解決兩個問題:一是網路之間要有通信鏈路,二是提供( )。
A、協議轉換功能 B、資料庫管理功能 C、安全保密功能 D、信息傳輸功能
10.Internet網是目前世界上第一大互聯網,它起源於美國,其雛形是( )。
A、NCFC B、CERNET C、GBNET D、ARPANET E、CSTNET
11.下列無符號數中,最小的是( )。
A、(11111010110)2 B、(3730)8 C、(2007)10 D、(7D9)16
12.已知集合A={1,2,3,4,5,6,7,8},則A的不含2和4的非空子集的個數為( )。
A、255 B、127 C、63 D、31 E、15
13.C語言中,如果整型變數a=125,則執行操作a>>=2;之後,a的值是( )。
A、1000 B、123 C、127 D、31 E、32
14.對於棧來說,若進棧序列為1、2、3、4、5、6,進棧過程中可以出棧,則下列出棧序列中不可能的是。( )。
A、134256 B、243165 C、345621 D、145623 E、132465
15.一棵完全二叉樹的結點總數為18,其葉結點數為( )。
A、7個 B、8個 C、9個 D、10個 E、11個
16.設G是一個非連通無向圖,共有28條邊,則該圖至少有( )個頂點。
A、8 B、9 C、10 D、6
17.對於一個無向帶權圖G=(V,E),其中V={a,b,c,d,e},E={(a,b),(a,c),(b,d),(c,d),(e,d),(c,e), (a,d),(b,e)},E中邊的權值分別為{1,4,2,5,3,1,2,3},則其最小生成樹上各邊的權值之和為( )。
A、6 B、7 C、8 D、9
18.如右所示的有向無環圖,對該圖進行拓樸排序,得到
的頂點序列正確的是( )。
A、1,2,5,3,4,6,8,7
B、1,3,6,5,2,8,7,4
C、1,2,3,4,5,6,7,8
D、1,3,2,4,5,7,8,6
19.給出一組數據:10、18、3、4、9、13、15、2、21、9、8,將它們生成一棵二叉排序樹,所需要的關鍵碼的比較次數為( )。
A、25 B、24 C、23 D、22
20.對給定的整數序列(541,132,984,746,518,181,946,314,205,827)進行從小到大的排序時,採用快速排序(以中間元素518為基準)的第一趟掃描結果是( )。
A、(181,132,314,205,541,518,946,827,746,984)
B、(205,132,314,181,518,746,946,984,541,827)
C、(541,132,827,746,518,181,946,314,205,984)
D、(541,132,984,746,827,181,946,314,205,518)
二、問題求解(每題5分,共10分)
1.在1,2,3,4中任取2個數,同時要求這兩個數不相鄰,有3種選取方法:1,3;1,4;2,4。那麼在1~9共9個數中,任取3個數,同時要求這4個數中沒有相鄰的數,它的選取方法有 種。
2.下面一個街區,縱向街道m條,橫向街道n條,設A點坐標為(1,1),則B點坐標為(m,n),當中有一點C,其坐標為(i,j)。某人從A點走到對角B點,要求必須向上或向右走,則經過其中的C點的走法一共有 種。
三、閱讀程序(每題8分,共32分)
1.#include <stdio.h>
main(){
int a,b,c,x,y,z,u[4];
scanf("%d%d%d%d",&u[0],&u[1],&u[2],&u[3]);
a=u[0]+u[1]+u[2]+u[3]-8;
b=u[0]*(u[1]+u[2]/u[3]-a);
c=u[0]*u[1]/u[2]*u[3];
x=(a+b+c)*3-u[3*c/4];
y=(a*b*c-13)/(u[b/3]*5);
if ((x+y)%2==0) z=(a+b+c+x+y)/2;
else z=(a+b+c-x-y)/2;
printf("%d\n",x-y+z);
}
輸入:2 5 7 4
2.#include <stdio.h>
main(){
int hi,lo,m,n;
scanf("%d%d",&m,&n);
hi=0; lo=0;
do{
n--; lo+=m;
if (lo>=10000) { lo-=10000; hi++; }
} while (n!=0);
printf("%4d,%4d\n",hi,lo);
}
輸入:345 208
輸出:
3.#include <stdio.h>
main(){
int i,j,p,n,q,s,a[21];
scanf("%d%d%d",&p,&n,&q);
j=21;
while (n>0){
j--; a[j]=n%10; n/=10;
}
s=0;
for (i=j;i<=20;i++)
s=s*p+a[i];
printf("%d\n",s);
j=21;
while (s>0){
j--; a[j]=s%q; s/=q;
}
for (i=j;i<=20;i++)
printf("%d",a[i]);
}
輸入:7 3051 8
輸出:
4.#include <stdio.h>
#include <string.h>
main(){
int n,m,i,j;
char x,st[10],a[10][10];
scanf("%s",st);
n=strlen(st);m=n/2;
for (i=0;i<n;i++)
for (j=0;j<n;j++) a[i][j]=' ';
for (i=0;i<=m;i++)
for (j=i;j<n-i;j++){
x=st[j];
a[i][j]=a[n-i-1][n-j-1]=x;
}
for (j=n-1;j>=0;j--){
for (i=0;i<n;i++)
printf("%2c",a[i][j]);
printf("\n");
}
}
輸入:ACEGIKM
輸出:
四、完善程序(前4空每空3分,後4空,每空4分,共28分)
1、對於給定的一個正整數,從其個位數開始,每隔一位取一個數字(即取其個位、百位、萬位等數字),形成一個新的整數並輸出。例如:運行時若輸入「14251382」,則輸出的整數為「4532」。
請完善下列程序:
#include <stdio.h>
main(){
long n,num;
int i,k;
scanf(「%d」,&n);
k=1; num=0;
for (i=1;n>0;i++){
if ①
{
num=num+ ② ;
k=k*10;
}
③ ;
}
printf(「%d\n」,num);
}
2、設某城市有 n 個車站,並有 m 條公交線路連接這些車站,設這些公交車都是單向的,這 n 個車站被順序編號為0 至 n-1 。本程序,輸入該城市的公交線路數、車站個數, 以及各公交線路上的各站編號,求得從站0出發乘公交 車至站 n-1 的最少換車次數。
程序利用輸入信息構建一張有向圖 G (用鄰接矩陣 g 表示),有向圖的頂點是車站,若有某條公交線路經 i 站能到達 j 站,就在頂點 i 到頂點 j 之間設置一條權為 1 的有向邊<i,j>。如是這樣,從站點 x 至站點 y 的最少上車次數便對應圖 G 中從點 x 至點 y 的最短路徑長度。而程序要求的換車次數就是上車次數減 1 。
程序的輸入格式:
第一行為兩個整數m和n,分別表示公交線路數和公交站數。
接下來m行數據,每一行為沿第m條公交車線路前進方向的各站編號dd(0<=dd<n),每行數字以-1結束。
請完善下面的程序:
#include <stdio.h>
#define M 20
#define N 50
int a[N+1]; /*用於存放一條線路上的各站編號*/
int g[N][N]; /*存儲對應的鄰接矩陣*/
int dist[N]; /*存儲站0到各站的最短路徑*/
int m,n;
void buildG(){
int i,j,k,sc,dd;
scanf("%d%d",&m,&n);
for (i=0; i<n; i++)
for (j=0; j<n; j++) g[i][j]=0;
for (i=0; i<m; i++){
sc=0;
while (1){
scanf("%d", &dd);
if (dd==-1) break;
if (dd>=0 && dd<n) ④ ;
}
a[sc]=-1;
for (k=1; a[k]>=0; k++)
for (j=0; j<k; j++)
g ⑤ =1;
}
}
int minLen(){
int j,k;
for (j=0; j<n; j++) dist[j]=g[0][j];
dist[0]=1;
do {
for (k=-1, j=0 ; j<n; j++)
if (dist[j] > 0 && (k == -1 || dist[j] < dist[k]))
k = j;
if (k<0 || k==n-1) break;
dist[k]=-dist[k];
for (j=1; j<n; j++)
if ( ⑥ && (dist[j]==0 || -dist[k]+1<dist[j]) )
⑦ ;
} while (1);
j = dist [n-1];
return ⑧ ;
}
main ( ){
int t;
buildG();
if ((t=minLen())<0) printf("No answer!\n");
else printf("%d\n",n-1,t);
}
參考答案
一、
1、B 2、C 3、C 4、B 5、A 6、D 7、A 8、A 9、A 10、D
11、C 12、C 13、D 14、D 15、C 16、B 17、B 18、C 19、D 20、B
二、
1、41
2、
三、
1、18
2、7,1760
3、1065
2051
4、(註:每相鄰的兩個字元之間空1格)
M A
K K C C
I I I E E E
G G G G G G G
E E E I I I
C C K K
A M
四、
1、
①(i%2==1)
②(n%10)*k
③n=n/10
2、
④a[sc++]=dd
⑤[a[j]][a[k]]
⑥dist[j]>=0 && g[k][j]==1
⑦-dist[k]+1
⑧k<0 ? -1 : j-1
D. 第十九屆全國青少年信息學奧林匹克聯賽普及組C語言試題 答案
E. 求第十四屆信息學奧賽聯賽普及組c語言初賽試題 第三大題第4題解析 詳細點
知道前序遍歷和中序遍歷,求後序遍歷,這就是程序的目的
F. NOIP2007普及組初賽答案(C語言)
這個比賽是哪的?
G. 第十六屆全國青少年信息學奧林匹克聯賽普及組和提高組試題答案(C語言)
答案在 http://10.0.248.2/blog/u/42/3649.html
H. 急需 第二十屆全國青少年信息學奧林匹克聯賽(CCF NOIP2014初賽普及組c語言試題)初
第二十屆全國青少年信息學奧林匹克聯賽後天才進行比賽,可以參考往屆的試題來復習
I. 求試題,17屆NOIP(C語言)普及組初賽試題
一、單項選擇題(共20題,每題1.5分,共計30分。每題有且僅有一個正確選項。)
1.在二進制下,1101001 + ( ) = 1110110。
A. 1011 B. 1101 C. 1010 D. 1111
2.字元「0」的ASCII碼為48,則字元「9」的ASCII碼為( )。
A. 39 B. 57 C. 120 D. 視具體的計算機而定
3.一片容量為8GB的SD卡能存儲大約( )張大小為2MB的數碼照片。
A. 1600 B. 2000 C. 4000 D. 16000
4.摩爾定律(Moore's law)是由英特爾創始人之一戈登•摩爾(Gordon Moore)提出來的。根據摩爾定律,在過去幾十年以及在可預測的未來幾年,單塊集成電路的集成度大約每( )個月翻一番。
A. 1 B. 6 C. 18 D. 36
5.無向完全圖是圖中每對頂點之間都恰有一條邊的簡單圖。已知無向完全圖G有7個頂點,則它共有( )條邊。
A. 7 B. 21 C. 42 D. 49
6.寄存器是( )的重要組成部分。
A. 硬碟 B. 高速緩存 C. 內存 D. 中央處理器(CPU)
7.如果根結點的深度記為1,則一棵恰有2011個葉結點的二叉樹的深度最少是( )。
A. 10 B. 11 C. 12 D. 13
8. 體育課的鈴聲響了,同學們都陸續地奔向操場,按老師的要求從高到矮站成一排。每個同學按順序來到操場時,都從排尾走向排頭,找到第一個比自己高的同學,並站在他的後面。這種站隊的方法類似於( )演算法 。
A. 快速排序 B. 插入排序 C. 冒泡排序 D. 歸並排序
9.一個正整數在二進制下有100位,則它在十六進制下有( )位。
A. 7 B. 13 C. 25 D. 不能確定
10.有人認為,在個人電腦送修前,將文件放入回收站中就是已經將其刪除了。這種想法是( )。
A. 正確的,將文件放入回收站意味著徹底刪除、無法恢復
B. 不正確的,只有將回收站清空後,才意味著徹底刪除、無法恢復
C. 不正確的,即使將回收站清空,文件只是被標記為刪除,仍可能通過恢復軟體找回
D. 不正確的,只要在硬碟上出現過的文件,永遠不可能被徹底刪除
11.廣度優先搜索時,需要用到的數據結構是( )。
A. 鏈表 B. 隊列 C. 棧 D. 散列表
12.在使用高級語言編寫程序時,一般提到的「空間復雜度」中的「空間」是指( )。
A. 程序運行時理論上所佔的內存空間
B. 程序運行時理論上所佔的數組空間
C. 程序運行時理論上所佔的硬碟空間
D. 程序源文件理論上所佔的硬碟空間
13.在含有n個元素的雙向鏈表中查詢是否存在關鍵字為k的元素,最壞情況下運行的時間復雜度是( )。
A. O(1) B. O(log n) C. O(n) D. O(n log n)
14.生物特徵識別,是利用人體本身的生物特徵進行身份認證的一種技術。目前,指紋識別、虹膜識別、人臉識別等技術已廣泛應用於政府、銀行、安全防衛等領域。以下不屬於生物特徵識別技術及其應用的是( )。
A. 指靜脈驗證 B. 步態驗證 C. ATM機密碼驗證 D. 聲音驗證
15.現有一段文言文,要通過二進制哈夫曼編碼進行壓縮。簡單起見,假設這段文言文只由4個漢字「之」、「乎」、「者」、「也」組成,它們出現的次數分別為700、600、300、200。那麼,「也」字的編碼長度是( )。
A. 1 B. 2 C. 3 D. 4
16.關於匯編語言,下列說法錯誤的是( )。
A. 是一種與具體硬體相關的程序設計語言
B. 在編寫復雜程序時,相對於高級語言而言代碼量較大,且不易調試
C. 可以直接訪問寄存器、內存單元、以及I/O埠
D. 隨著高級語言的誕生,如今已完全被淘汰,不再使用
17.( )是一種選優搜索法,按選優條件向前搜索,以達到目標。當探索到某一步時,發現原先選擇並不優或達不到目標,就退回一步重新選擇。
A. 回溯法 B. 枚舉法 C. 動態規劃 D. 貪心法
18.1956年( )授予肖克利(William Shockley)、巴丁(John Bardeen)和布拉頓(Walter Brattain),以表彰他們對半導體的研究和晶體管效應的發現。
A. 諾貝爾物理學獎
B. 約翰•馮•諾依曼獎
C. 圖靈獎
D. 高德納獎(Donald E. Knuth Prize)
19.對一個有向圖而言,如果每個節點都存在到達其他任何節點的路徑,那麼就稱它是強連通的。例如,右圖就是一個強連通圖。事實上,在刪掉邊( )後,它依然是強連通的。
A. a B. b C. c D. d
20.從ENIAC到當前最先進的計算機,馮•諾依曼體系結構始終佔有重要的地位。馮•諾依曼體系結構的核心內容是( )。
A. 採用開關電路 B. 採用半導體器件
C. 採用存儲程序和程序控制原理 D. 採用鍵盤輸入
二、問題求解(共2題,每題5分,共計10分)
1.每份考卷都有一個8位二進制序列號。當且僅當一個序列號含有偶數個1時,它才是有效的。例如,00000000、01010011都是有效的序列號,而11111110不是。那麼,有效的序列號共有________個。
2.定義字元串的基本操作為:刪除一個字元、插入一個字元和將一個字元修改成另一個字元這三種操作。將字元串A變成字元串B的最少操作步數,稱為字元串A到字元串B的編輯距離。字元串"ABCDEFG"到字元串"BADECG"的編輯距離為________。
三、閱讀程序寫結果(共4題,每題8分,共計32分)
1.
#include<stdio.h>
int main() {
int i, n, m, ans;
scanf("%d%d", &n, &m);
i = n;
ans = 0;
while (i <= m) {
ans += i;
i++;
}
printf("%d\n", ans);
return 0;
}
輸入:10 20
輸出:_________
2.
#include <stdio.h>
#include <string.h>
#define SIZE 20
int main()
{
char map[] = "22233344455566677778889999";
char tel[SIZE];
int i;
scanf("%s", tel);
for (i = 0; i < strlen(tel); i++)
if ((tel[i] >= '0') && (tel[i] <= '9'))
printf("%c", tel[i]);
else if ((tel[i] >= 'A') && (tel[i] <= 'Z'))
printf("%c", map[tel[i] - 'A']);
return 0;
}
輸入:CCF-NOIP-2011
輸出:_________
3.
#include <stdio.h>
#include <string.h>
#define SIZE 100
int main()
{
int n, i, sum, x, a[SIZE];
scanf("%d", &n);
memset(a, 0, sizeof(a));
for (i = 1; i <= n; i++) {
scanf("%d", &x);
a[x]++;
}
i = 0;
sum = 0;
while (sum < (n / 2 + 1)) {
i++;
sum += a[i];
}
printf("%d\n", i);
return 0;
}
輸入:
11
4 5 6 6 4 3 3 2 3 2 1
輸出:_________
4.
#include <stdio.h>
int solve(int n, int m)
{
int i, sum;
if (m == 1)
return 1;
sum = 0;
for (i = 1; i < n; i++)
sum += solve(i, m - 1);
return sum;
}
int main()
{
int n, m;
scanf("%d %d", &n, &m);
printf("%d\n", solve(n, m));
return 0;
}
輸入:7 4
輸出:_________
四、完善程序(前11空,每空2分,後2空,每空3分,共計28分)
1.(子矩陣)輸入一個n1*m1的矩陣a,和n2*m2的矩陣b,問a中是否存在子矩陣和b相等。若存在,輸出所有子矩陣左上角的坐標;若不存在輸出「There is no answer」。
#include <stdio.h>
#define SIZE 50
int n1, m1, n2, m2, a[SIZE][SIZE], b[SIZE][SIZE];
int main()
{
int i, j, k1, k2, good, haveAns;
scanf("%d %d", &n1, &m1);
for (i = 1; i <= n1; i++)
for (j = 1; j <= m1; j++)
scanf("%d", &a[i][j]);
scanf("%d %d", &n2, &m2);
for (i = 1; i <= n2; i++)
for (j = 1; j <= m2; j++)
① ;
haveAns = 0;
for (i = 1; i <= n1 - n2 + 1; i++)
for (j = 1; j <= ② ; j++) {
③ ;
for (k1 = 1; k1 <= n2; k1++)
for (k2 = 1; k2 <= ④ ; k2++) {
if (a[i + k1 - 1][j + k2 - 1] != b[k1][k2])
good = 0;
}
if (good == 1) {
printf("%d %d\n", i, j);
⑤ ;
}
}
if (haveAns == 0)
printf("There is no answer\n");
return 0;
}
2.(大整數開方)輸入一個正整數n(1≤n<10100),試用二分法計算它的平方根的整數部分。
#include <stdio.h>
#include <string.h>
#define SIZE 200
typedef struct node {
int len, num[SIZE];
} hugeint;
//其中len表示大整數的位數;num[1]表示個位、num[2]表示十位,以此類推
hugeint times(hugeint a, hugeint b)
//計算大整數a和b的乘積
{
int i, j;
hugeint ans;
memset(ans.num, 0, sizeof(ans.num));
for (i = 1; i <= a.len; i++)
for (j = 1; j <= b.len; j++)
① += a.num[i] * b.num[j];
for (i = 1; i <= a.len + b.len; i++) {
ans.num[i + 1] += ans.num[i] / 10;
② ;
}
if (ans.num[a.len + b.len] > 0)
ans.len = a.len + b.len;
else
ans.len = a.len + b.len - 1;
return ans;
}
hugeint add(hugeint a, hugeint b)
//計算大整數a和b的和
{
int i;
hugeint ans;
memset(ans.num, 0, sizeof(ans.num));
if (a.len > b.len)
ans.len = a.len;
else
ans.len = b.len;
for (i = 1; i <= ans.len; i++) {
ans.num[i] += ③ ;
ans.num[i + 1] += ans.num[i] / 10;
ans.num[i] %= 10;
}
if (ans.num[ans.len + 1] > 0)
ans.len++;
return ans;
}
hugeint average(hugeint a, hugeint b)
//計算大整數a和b的平均數的整數部分
{
int i;
hugeint ans;
ans = add(a, b);
for (i = ans.len; i >= 2; i--) {
ans.num[i - 1] += ( ④ ) * 10;
ans.num[i] /= 2;
}
ans.num[1] /= 2;
if (ans.num[ans.len] == 0)
ans.len--;
return ans;
}
hugeint plustwo(hugeint a)
//計算大整數a加2後的結果
{
int i;
hugeint ans;
ans = a;
ans.num[1] += 2;
i = 1;
while ((i <= ans.len) && (ans.num[i] >= 10)) {
ans.num[i + 1] += ans.num[i] / 10;
ans.num[i] %= 10;
i++;
}
if (ans.num[ans.len + 1] > 0)
⑤ ;
return ans;
}
int over(hugeint a, hugeint b)
//若大整數a>b則返回1,否則返回0
{
int i;
if ( ⑥ )
return 0;
if (a.len > b.len)
return 1;
for (i = a.len; i >= 1; i--) {
if (a.num[i] < b.num[i])
return 0;
if (a.num[i] > b.num[i])
return 1;
}
return 0;
}
int main()
{
char s[SIZE];
int i;
hugeint target, left, middle, right;
scanf("%s", s);
memset(target.num, 0, sizeof(target.num));
target.len = strlen(s);
for (i = 1; i <= target.len; i++)
target.num[i] = s[target.len - i] - ⑦ ;
memset(left.num, 0, sizeof(left.num));
left.len = 1;
left.num[1] = 1;
right = target;
do {
middle = average(left, right);
if (over( ⑧ ) == 1)
right = middle;
else
left = middle;
} while (over(plustwo(left), right) == 0);
for (i = left.len; i >= 1; i--)
printf("%d", left.num[i]);
printf("\n");
return 0;
}