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;
}

猜你喜欢

转载自blog.csdn.net/KK_2018/article/details/83575776
2.1
今日推荐