本題參考了演算法筆記的大數運算
簡單解決
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
void print(int a[200]){
int i=200-1; // 要印的數字位置
while(i>=0 && a[i]==0) i--; // 數字開頭的零都不印
if(i<0)cout << '0';
else while(i>=0) cout << a[i--];
}
// c = a + b;
void add(int a[200], int b[200], int c[200])
{
for (int i=0; i<200; i++) // 對應的位數相加
c[i] = a[i] + b[i];
for (int i=0; i<200-1; i++) // 一口氣進位
{
c[i+1] += c[i] / 10; // 進位
c[i] %= 10; // 進位後餘下的數
}
}
char input[200]={'\0'};
int a[200],c[200];
int main(){
while(1){
gets(input);
if(input[0]=='0'){
print(c);
printf("\n"); //本題需要留一個換行
break;
}
int len = strlen(input);
for(int i=0;i<len;i++){
a[i]=input[len-i-1]-48;
}
add(a,c,c);
for(int i=0;i<200;i++)a[i]=0;
}
return 0;
}
沒有留言:
發佈留言