2014年9月26日星期五

[UVa] 424 - Integer Inquiry

本題參考了演算法筆記的大數運算

簡單解決
 

#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;
}
 

沒有留言: