1. 程式人生 > >基礎-數字翻轉(反轉函式reverse())

基礎-數字翻轉(反轉函式reverse())

對於一個整數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

分析:題意很好理解,但需要注意翻轉後還是一個數,所以每次翻轉都需要去掉前導0

主要介紹一下反轉函式reverse(),用法和sort()一樣,只是前者功能是翻轉,後者功能是排序

reverse(a,a+n),標頭檔案上是#include<algorithm>,介紹完畢;

下面是程式碼:

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
	char x[1005],y[1005];
    scanf("%s %s",x,y);
    int len1=strlen(x),len2=strlen(y);
    int t=max(len1,len2);
    for(int i=0;i<t;i++)
    {
    	if(i>=len1) x[i]='0';
    	else if(i>=len2) y[i]='0';
	}
	reverse(x,x+t);
	reverse(y,y+t);
	int flag=0;//如果最高位需要進位,則賦值給他; 
	for(int i=t-1;i>=0;i--)
	{
		int l=0;
		l=(x[i]-'0')+(y[i]-'0');
		if(l>=10)
		{
			if(i==0)
			{
				flag=l/10;
			}
			else x[i-1]+=l/10;
			l=l%10;
		}
		x[i]=l+'0';
	}
	
	
	int k=0;
	for(int i=0;i<t;i++)
	{
		k=i;
		if(flag||x[i]!='0') break;
	}
	t--;
	while(x[t]=='0'&&t>0) t--;
	for(int i=t;i>=k;i--)
		cout<<x[i];
	if(flag!=0) cout<<flag<<endl;
	return 0;
}