學校的oj題目 求2de1000次方的個位數相加 程式填空 實在想不出來了 各位大神看看
#include <stdio.h>
#define X 1000
#define Y 400
int Fun() {
int a[Y]={2},b[Y];
int sum=0;
int i,j,m,n;
for (i=1;i<X;++i) {
for (j=0;j<Y;++j)
b[j]=a[j];
for (n=0;n<Y;++n)
if (n==0)
a[n]=2*b[n]%10;
else
___________________________________;
}
for(m=0;m<Y;m++)
sum+=a[m];
return sum;
}
int main(void) {
printf("%d\n",Fun());
return 0;
}
uj5u.com熱心網友回復:
說清楚要求,不要讓人猜。uj5u.com熱心網友回復:
要求:2^15 = 32768 ,其各位之和為 3 + 2 + 7 + 6 + 8 = 26。
求2^1000各位數字之和。其中^表示次方,如:2^5表示2的5次方。
下面程式計算并輸出結果,請完成缺少的陳述句。要求參賽選手在弄清給定代碼的基礎上填寫缺失的部分,使得程式邏輯正確、完整。所填寫的代碼不多于一條陳述句(即不能出現分號)。
uj5u.com熱心網友回復:
可以的話順便解釋一下這個代碼 不帶清楚這個想要干嘛uj5u.com熱心網友回復:
a[n]=(2*b[n]+2*b[n-1]/10)%10uj5u.com熱心網友回復:
就是計算2的1000次方的值,因為它太大,所以需要用陣列元素表示它的各位數字。計算的時候參考手寫豎式的計算程序。uj5u.com熱心網友回復:
你好 可以解釋一下思路嗎 就是怎么想出來要這么寫的uj5u.com熱心網友回復:
超大數計算超高精度計算基本就都是這么寫的,網上一搜一大堆,就是硬模擬豎式計算嘛。不光是乘2,更重要的是四則和各種其他運算。當然這個代碼不夠精致,還有一些無用功在里面。uj5u.com熱心網友回復:
按照10進制從低到高一位一位算,考慮到低位進上來的進位就行。如果你說的是填空的這句話的話。uj5u.com熱心網友回復:
老哥要不可以從第一個回圈開始到結束詳細注釋一下嗎 就把我當成一個新手解釋一下 這個確實是看不懂uj5u.com熱心網友回復:
#include <stdio.h>
#define X 1000
#define Y 400
int Fun() {
int a[Y] = { 2 }, b[Y]; //原本有個2
int sum = 0;
int i, j, m, n;
for (i = 1; i < X; ++i) { //這個回圈999次,每次乘2
for (j = 0; j < Y; ++j) //把上次結果保存起來作為下次的運算元
b[j] = a[j];
for (n = 0; n < Y; ++n) //這個就是a=b*2
if (n == 0)
a[n] = 2 * b[n] % 10; //最低位也就是個位不用考慮進位,因為沒人給它進
else
a[n]=(2*b[n]+2*b[n-1]/10)%10; //其他位就得考慮進位了,a[1]是十位,a[2]是百位,依次類推
}
for (m = 0; m < Y; m++) //按要求累加各數位
sum += a[m];
return sum;
}
int main(void) {
printf("%d\n", Fun());
return 0;
}
輸出
1366
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/257891.html
標籤:C語言
上一篇:請大家幫幫忙
