基礎-數字翻轉(反轉函式reverse())
阿新 • • 發佈:2018-12-16
對於一個整數X,定義操作rev(X)為將X按數位翻轉過來,並且去除掉前導0。例如: 如果 X = 123,則rev(X) = 321; 如果 X = 100,則rev(X) = 1. 現在給出整數x和y,要求rev(rev(x) + rev(y))為多少?
輸入描述:
輸入為一行,x、y(1 ≤ x、y ≤ 1000),以空格隔開。
輸出描述:
輸出rev(rev(x) + rev(y))的值
示例1
輸入
123 100
輸出
223
分析:題意很好理解,但需要注意翻轉後還是一個數,所以每次翻轉都需要去掉前導0
主要介紹一下反轉函式reverse(),用法和sort()一樣,只是前者功能是翻轉,後者功能是排序
reverse(a,a+n),標頭檔案上是#include<algorithm>,介紹完畢;
下面是程式碼:
#include<iostream> #include<cstring> #include<algorithm> using namespace std; int main() { char x[1005],y[1005]; scanf("%s %s",x,y); int len1=strlen(x),len2=strlen(y); int t=max(len1,len2); for(int i=0;i<t;i++) { if(i>=len1) x[i]='0'; else if(i>=len2) y[i]='0'; } reverse(x,x+t); reverse(y,y+t); int flag=0;//如果最高位需要進位,則賦值給他; for(int i=t-1;i>=0;i--) { int l=0; l=(x[i]-'0')+(y[i]-'0'); if(l>=10) { if(i==0) { flag=l/10; } else x[i-1]+=l/10; l=l%10; } x[i]=l+'0'; } int k=0; for(int i=0;i<t;i++) { k=i; if(flag||x[i]!='0') break; } t--; while(x[t]=='0'&&t>0) t--; for(int i=t;i>=k;i--) cout<<x[i]; if(flag!=0) cout<<flag<<endl; return 0; }