1. 程式人生 > >水題 第四站 HDU A + B Problem II

水題 第四站 HDU A + B Problem II

一道很簡單的題目讓我做得噁心無比,大數問題,不熟悉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)輸出格式,最後一行輸出不加空行,= =題目中有說嗎?注意就是了= =