1. 程式人生 > >2.1 基礎-數字翻轉

2.1 基礎-數字翻轉

題目
對於一個整數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;
}