2.1 基礎-數字翻轉
阿新 • • 發佈:2018-11-01
題目
對於一個整數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
推薦第二種和第四種寫法~
程式碼一(比較繁瑣)
#include <iostream> using namespace std; int main() { int x,y,a,b,k,j,i; int c[1001],d[1001],e[1001]; cin>>x>>y; if(x==0 && y==0) cout<<"0"; else { for(i=0;x>0;x/=10) { c[i]=x%10; i++; } for(j=i-1;j>=0;j--) { if(c[j]!=0) break; } a=b=0; for(i=0;i<=j;i++) { a=a*10+c[i]; } for(i=0;y>0;y/=10) { d[i]=y%10; i++; } for(k=i-1;k>=0;k--) { if(d[k]!=0) break; } for(i=0;i<=k;i++) { b=b*10+d[i]; } int n=a+b; for(i=0;n>0;n/=10) { e[i]=n%10; i++; } for(j=0;j<i;j++) { if(e[j]!=0) break; } for(k=j;k<i;k++) { cout<<e[k]; } } cout<<endl; return 0; }
程式碼二(鍛鍊思維)
#include <iostream> #include <string.h> using namespace std; const int MAX=1e3 + 10; int main() { char x[100],y[100]; int l1,l2,a,b,j,i; while(cin>>x>>y) { a=b=0; l1=strlen(x); l2=strlen(y); for(i=l1-1;i>=0;i--) { a=a*10+x[i]-'0'; } for(i=l2-1;i>=0;i--) { b=b*10+y[i]-'0'; } a=a+b; for(i=0;a>0;i++) { if(a%10) break; a/=10; } for(j=0;a>0;j++) { cout<<a%10; a/=10; } cout<<endl; } return 0; }
程式碼三
#include<bits/stdc++.h> using namespace std; char x[100],y[100]; vector<int> ann; int main(){ cin>>x>>y; int l1=strlen(x); int l2=strlen(y); reverse(x,x+l1); reverse(y,y+l2); int n,m; n=m=0; for(int i=0;i<l1;i++){ n=n*10+x[i]-'0'; } for(int i=0;i<l2;i++){ m=m*10+y[i]-'0'; } int kk=n+m; while(kk){ ann.push_back(kk%10); kk/=10; } int id=10000; for(int i=0;i<ann.size();i++){ if(ann[i]){ id=i; break; } } if(id==10000){ cout<<0<<endl; return 0; } for(int i=id;i<ann.size();i++) cout<<ann[i]; puts("");//換行 return 0; }
程式碼四(簡潔高效)
#include <iostream>
using namespace std;
int rev(int a)
{
int ans=0;
while(a>0)
{
ans=ans*10+a%10;
a/=10;
}
return ans;
}
int main()
{
int x,y;
while(cin>>x>>y)
{
cout<<rev(rev(x)+rev(y))<<endl;
}
return 0;
}