1樓:網友
大整數加法。
沒明白你的 scanf("%d %d",&a,&b);是什麼意思。
我的**,可以通過。
#include
#include
char a1[1001], a2[1001];
int sum[1002];
大整數相加,並返回結果位數。
int largeadd(char a1,char a2,int len1, int len2)
先相加,再處理進位,res裡是先低位再高位。
a1長度比a2更長。
int i = len1-1, j = len2-1, k = 0;
while(j >=0)
sum[k++]a1[i--]0') a2[j--]0');
while(i >=0)
sum[k++]a1[i--]0';
從低位到高位處理進位。
for (int t = 0; t < k; t++)if(sum[t] >10)
sum[t] -10;
sum[t+1]++
if (sum[k] !0)
return k+1;
elsereturn k;
int main()
int n, cas = 1, len1, len2, len3;
scanf("%d", n);
while(cas <=n)
memset(a1, 0, sizeof(a1));
memset(a2, 0, sizeof(a2));
memset(sum, 0, sizeof(sum));
scanf("%s %s", a1, a2);
printf("case %d:%s + s = cas++,a1, a2);
len1 = strlen(a1);
len2 = strlen(a2);
len1 >=len2 ? len3 = largeadd(a1, a2, len1, len2) :len3 = largeadd(a2, a1, len2, len1);
for (int i = len3-1; i >=0; i--)printf("%d", sum[i]);
printf("");
if(cas <=n)
printf("");
return 0;
2樓:網友
#include
#include
int main()
int n,ca,i,j;
int length1,length2,length3;
char a[1001],b[1001];
scanf("%d",&n);
ca = 1; /這個要在外面初始化,不然一直輸出case 1:
while(n--)
scanf("%s %s",a,b); 要用%s輸入字串。
char sum[1001];
sum[0]='0';
length1=strlen(a);
length2=strlen(b);
length3=length1>length2?length1:length2;
if(length1>=length2)
for(i=length1-1,j=length2-1;j>=0;j--,i--)
sum[i+1]=(a[i]-'0')+b[j]-'0');把能對齊的部分先相加,如1234 和56,就先加低2位,4+6,3+5,儲存為8,10
for(i;i>=0;i--)
sum[i+1]=a[i]-'0';/多出的高位就是和,就是1,2
length3=length1;
else if(length1=0;j--,i--)
sum[i+1]=(a[j]-'0')+b[i]-'0');
for(i;i>=0;i--)
sum[i+1]=b[i]-'0';
length3=length2;
for(i=length3;i>0;i--)處理進位。
if(sum[i]>=10)
sum[i-1]=sum[i-1]+sum[i]/10;sum[i]=sum[i]%10;}
printf("case %d:",ca++)這裡你的格式和acm題中的不同。
printf("%s + s = a,b);/這裡的格式有空格。
if(sum[0]!=0') printf("%c",sum[0]);處理最高位是否有進位。
for(i=1;i<=length3;i++)
printf("%d",sum[i]);
printf("");
if(n!=0) printf("");
return 0;
做acm題,遇到格式問題的時候,最好的辦法就是複製。
建議自己再寫一遍該**。 ^
杭電acm1030,求解題思路?
3樓:網友
剛在別人那看到這個題。寫了點思路,複製給你吧。
已經知道了起點m和終點n,現在就是要找到乙個通用的規律讓m儘快到達n。
由圖形中可以看出,假設乙個起點是處於三角形的頂部,比如1,2,4,5,7,9...
那麼它到它下面某一層的點的距離都是一樣的,比如1到2和1到4。比如2到10和2到12和2到14。等等。
根據這個規律我們可以想到,如果n是在m為頂點的三角形的下面,那麼只要找出之間隔了有多少層,問題就解決了。
如果m不是三角形的頂點,我們可以找到m所在的最小的三角形,比如6就是2,8就是4,13就是7...
如何判斷是否在某點下面,首先終點n的值我們是知道的,我們可以算出它所在的層數。
那麼m和n之間的層數差我們就知道了,我們可以算出頂點的左右邊界,如何加以判斷。
在的話,規律很好找。不在的話,在左右邊界中找到n最近的邊界點,算出差值,就是額外的步數,再加上到這一層的步數。
找規律的話,假設頂點f(x)在第x層,那麼它到下一層x+1層的右邊界就是 f(x)+2*x-1 左邊界就是f(x)+2x+1,依次類推,每隔一層頂點到邊界的步數就加2。
當然你也可以找通用表示式,這個事情我就不做了。
純手打,可能沒表達清楚,可以一起**。
杭電1002求救,執行完全正確,按要求做的,提交時提示Co
你用g 提交試試,不過你的 還有其它問題。給你個ac了的 include include using namespace std string add string a,string b if g return a int main return 0 杭電acm2014的c語言問題,為什麼提交了卻是...
杭電與桂電,杭電和桂電差距為什麼這麼大?
除了地理優勢外沒什麼優勢 .全國大學生電子設計競賽獲獎情況桂電強點 杭電才個一等獎 全國多名 桂電乙個最高獎索尼杯個一等獎 全國第五。.地理位置,杭州是省會,位於東部沿海地區,繁華,交通方便。桂林是中等城市,地處廣西,著名的旅遊城市,雖然交通也比較方便,火車站機場都有。但確實無法和杭州相比。.文化氛...
杭電2019哪裡錯了,杭電2054哪裡錯了
兩個地方,陣列不夠大,結尾小數點要去掉,但是超時了,ac的 在最後 include include char fun char s int main b 100000 陣列開大while scanf s s a,b return 0 char fun char s if f 去掉尾部的0 if s ...