0
点赞
收藏
分享

微信扫一扫

A1024 Palindromic Number (25 分| 大整数相加,附详细注释,逻辑分析)


写在前面

  • 思路分析
  • 给定1个数字,允许翻转后相加次数cnt,求要多少次才能变成1个回文数字,输出回文数字和翻转相加多少次
  • 本身就是回文数字就输出0次
  • 超过给定次数cnt,输出不是回文的结果,并输出给定次数cnt
  • 问题点
  • 会超出long int类型(会有两个点溢出错误),所以用字符串串存储,大整数相加
  • ​where N (≤10^10) is the initial numer​
  • 通过对字符串翻转后比较来判断是否为回文串
  • 题目简单,细节问题耗费时间

测试用例

input:
67 3

output:
484
2

input:
69 3

output:
1353
3

ac代码

#include <iostream>
#include <algorithm>
using namespace std;
string s;
void add(string t)
{
int len = s.length(), carry = 0;
for(int i = 0; i < len; i++)
{
s[i] = s[i] + t[i] + carry - '0';
carry = 0;
if(s[i] > '9')
{
s[i] = s[i] - 10;
carry = 1;
}
}
if(carry) s += '1';
reverse(s.begin(), s.end());
}
int main()
{
int cnt, i;
cin >> s >> cnt;
for(i = 0; i <= cnt; i++)
{
string t = s;
reverse(t.begin(), t.end());
if(s == t || i == cnt) break;
add(t);
}
cout << s << endl << i;
return 0;
}


举报

相关推荐

0 条评论