SJTUOJ 1014. 高精度加法
阿新 • • 發佈:2018-12-23
問題內容
Description
輸入2個整數a和b,輸出a+b。
Input Format
輸入有兩行,第一行a,第二行b。
0≤a,b≤101000000≤a,b≤10100000。
Output Format
輸出只有一行,a+b。
Sample Input
1234
1111111111
Sample Output
1111112345
程式碼實現及簡析
陣列模擬豎式計算,型別選用int,long,long long,char都可以,取模不超過型別最大值就行
#include <stdio.h>
#include <string.h>
char a[ 100002];
char b[100002];
int main(){
int i = 0;
int lena = 0,lenb = 0,lenres,lenadd;
char *result, *add=a;
char in;
while(1)
{
in = getchar();
if(in == '\n'){
add[i]=0;
if(!lena){
lena = i;
add = b;
result = a;
i = 0;
}
else{
lenb = i;
if(lena < lenb){
result = b;
add = a;
lenres = lenb;
lenadd = lena;
}
else{
lenres = lena;
lenadd = lenb;
}
break;
}
}
else{
add[i++] = in;
}
}
lenadd--;
while(lenres--){
result[lenres] = (result[lenres]-'0') + (lenadd >= 0 ? add[lenadd] - '0':0);
lenadd--;
in = result[lenres]/10;
result[lenres] = result[lenres]%10 + '0';
if(lenres > 0){
result[lenres - 1] = in + result[lenres - 1];
in = 0;
}
}
if(in){
putchar(in+'0');
}
puts(result);
return 0;
}
時間:109ms 空間:10180kb