目的:找出一个数相应的翻转数
输入:
正整数 不超过1000个数字。。。
输出:
输出过程中每一步的过程
A + B = C
A是初始数字,B是翻转数字,C是和。
十步不能得到,输出NOT Found。
算法:
一个函数判定是否为回文数字
string可以翻转,转换成整形加减,再把整形赋值给字符串。
#include<stdio.h>
#include<string>
#include<algorithm>
#include<iostream>
using namespace std;
string s;
int cnt = 0;
bool ispal(string str)
{
for(int i=0;i<(str.size()/2)+1;i++)
{
if(str[i]!=str[str.size()-i-1])
{
return false;
}
}
return true;
}
void add(string &str)
{
string temp = str;
reverse(temp.begin(),temp.end());
string sum;
int carry = 0;
for(int i=str.size()-1;i>=0;i--)
{
sum += ((str[i] - '0' + temp[i] - '0' + carry)%10 + '0');
carry = (str[i] - '0' + temp[i] - '0' + carry)/10;
}
if(carry!=0)
{
sum = sum + '1';
}
reverse(sum.begin(),sum.end());
printf("%s + %s = %s\n",str.c_str(),temp.c_str(),sum.c_str());
str = sum;
}
int main()
{
cin>>s;
while(cnt!=10)
{
if(ispal(s))
{
printf("%s is a palindromic number.\n",s.c_str());
return 0;
}else
{
add(s);
cnt++;
}
}
if(ispal(s))
{
printf("%s is a palindromic number.\n",s.c_str());
return 0;
}else
{
printf("Not found in 10 iterations.\n");
return 0;
}
}
反思:不能转换成整数加减。因为它是长整数的加减。超过了表达范围。所以必须用字符串加减。这里一个常用的东西。字符串存数字的时候,左边的数字就存在字符串的低位。所以字符串的低位存的是数字的高位。所以我们应该从字符串的高位加起,也就是数字的低位开始。还有字符串的加法。加法符号左边的字符串在和字符串的左边,符号右边的在和字符串的右边。所以左边加是在字符串首加东西,右边加是在字符串尾部加东西。