水題 第四站 HDU A + B Problem II
阿新 • • 發佈:2018-12-04
一道很簡單的題目讓我做得噁心無比,大數問題,不熟悉java,還是用C++寫吧。顯然需要用到字串,然後再將字串中的數字轉化為整數型別進行加法運算。去年做類似題目的時候還只知其然不知其所以然,現在明白了為什麼不能直接讀入陣列。
然而時隔一年也忘記了思路,加上當時沒有總結過,只是仿照程式碼敲了一遍,收穫實在甚小。
參考網上的思路,讀入字串,逐位進行-‘0’操作,存入陣列,進行陣列加法,記得進位操作和陣列初始化為0,這樣清晰的思路程式碼簡直信手拈來,但是還是遇到了意料之中的WA,上程式碼分析
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <algorithm>
#include <string.h>
using namespace std;
int main ()
{
int n, i, cas=1;
char str1[1010],str2[1010];
int a[1010], b[1010],c[1010];
scanf("%d",&n);
int m=n;
while(n--)
{
scanf("%s %s",str1,str2);
memset(a,0 ,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
int len=max(strlen(str1),strlen(str2));
int j=len,k=len;
for(i=strlen(str1)-1; i>=0; i--)
{
a[j--]=str1[i]-'0';
}
for(i=strlen(str2)-1; i>=0; i--)
{
b[k--]=str2[i]-'0' ;
}
for(i=len; i>=1; i--)
{
int ans=a[i]+b[i]+c[i];
if(ans>=10)
{
c[i]=ans%10;
c[i-1]=ans/10;
}
else
c[i]=ans;
}
printf("Case %d:\n",cas++);
printf("%s + %s = ",str1,str2);
if(c[0])
printf("%d",c[0]);
for(i=1; i<=len; i++)
printf("%d",c[i]);
printf("\n");
//printf("%d %d\n",m,cas);
if(m!=cas-1)
printf("\n");
}
return 0;
}
(1)剛開始將字串轉化為陣列,忽略了不同位數問題,比如34+234存入陣列應為034+234,這樣才能進行對應位的加法,剛開始沒注意到這個細節,想當然就存成340+234
(2)輸出格式,最後一行輸出不加空行,= =題目中有說嗎?注意就是了= =