• 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;
    }
    
  • 相关阅读:
    1008: 约瑟夫问题
    1009: 恺撒Caesar密码
    1006: 日历问题
    1007: 生理周期
    Asp.Net Core 发布和部署( MacOS + Linux + Nginx )
    ASP.NET Core Docker部署
    Asp.Net Core 发布和部署(Linux + Jexus )
    ASP.NET Core 十种方式扩展你的 Views
    基于机器学习的web异常检测
    Disruptor深入解读
  • 原文地址:https://www.cnblogs.com/cnlik/p/11851862.html
Copyright © 2020-2023  润新知