欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

2.1 基础-数字翻转

程序员文章站 2022-04-02 22:07:04
...

题目
对于一个整数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;
}
相关标签: 思维