PAT A1024 Palindromic Number
阿新 • • 發佈:2020-08-26
題意:迴文字,對輸入數值進行判斷,若不是迴文,則反轉相加繼續。
分析:數值1010,再迭代相加100次,大概達到1040級;long long型也不足以表示,需要使用字元型處理。使用字串的轉化為大數陣列處理。
注意:大數運算是唯一long long也無法處理的資料大小,結果輸出處需要迭代輸出
#include<cstdio> #include<string.h> using namespace std; const int N =1000;//最大位數 struct bign{ int value[N]; int len; bign(){ memset(value,0,sizeof(value)); len = 0; } }; bign change(char s[]){ bign a; a.len = strlen(s); for(int i=0;i<a.len;i++){ a.value[i] = s[a.len-1-i]-'0';//逆序儲存 } return a; } bool ispal(bign a){ for(int i=0;i<=(int)(a.len/2);i++){//取了是因為a.len = 1的情況 if(a.value[i] != a.value[a.len-1-i]) return false; } return true; } bign add(bign a){ bign b; int temp=0;//進位 b.len = a.len; for(int i=0;i < b.len;i++){ temp += a.value[i]+a.value[a.len-1-i]; b.value[i] = temp%10;//餘數為該位的值 temp /= 10;//進位 } if(temp!=0){//仍有進位 b.value[b.len] = temp; b.len++; } return b; } int main(){ char s[N]; int k; scanf("%s %d",s,&k); bign a = change(s); int c = 0; for(int i = 0; i < k ; i++){//處理c次,c<=k if(ispal(a) == true) break; else{ a = add(a); c++; } } for(int j=0;j<a.len;j++){ printf("%d",a.value[a.len-1-j]); } printf("\n"); printf("%d",c); return 0; }