1024. Palindromic Number (25)

1024. Palindromic Number (25)

题目大意

给定一个数字,和允许翻转后相加的次数cnt,求要多少次才能变成一个回文数字,输出那个回文数字和翻转相加了多少次,如果本身就是回文数字就输出0次,如果超过给定的次数cnt了,就输出那个不是回文的结果,并且输出给定的次数cnt。

基本思路

用字符串完成大整数的相加操作。
可以通过对字符串翻转后比较来判断是否为回文串。

代码

#include <bits/stdc++.h>
using namespace std;
 string s;//适中作为每次循环的初始串
void add(string t){
    int carry=0;//进位
    //大整数运算
    for (int i = 0; i < t.length(); ++i) {
//         cout<<carry-'0'<<endl;
        s[i]=s[i]+t[i]+(carry-'0');//两个数字字符相加,会多加一个48('0')
        carry=0;
        if(s[i]>'9'){
            s[i]=s[i]-10;
            carry=1;
        }
    }
    //考虑最高位的进位
    if(carry==1) s=s+'1';
    //反转最后的结果
    reverse(s.begin(),s.end());
}
 int main(){
     int cnt,i;//允许反转的次数,当前是第几次反转(从0开始)
     cin>>s>>cnt;
     //进行反转操作
     for (i = 0; i < cnt; ++i) {
         string t=s;
         reverse(t.begin(),t.end());
         //如果s已经是回文串或者反转的次数用尽,退出
         if(s==t||i==cnt) break;
         //进行大整数相加的操作
         add(t);
     }
     //输出
     cout<<s<<endl<<i;
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这段代码也可以实现在一个区间内寻找回文数并计算它们的和。 其中 `isPalindromic` 函数用于判断一个数是否为回文数,`getInputs` 函数用于获取区间的上边界和下边界,并检查用户的输入是否合法。在主程序中,我们首先调用 `getInputs` 函数获取区间的上边界和下边界,然后通过循环遍历这个区间,找到其中所有回文数,并将它们存储在一个列表中。最后,我们计算这些回文数的总和,并输出结果。 这段代码的工作流程与之前的示例代码基本相同,唯一的区别是在输入区间时,代码将上边界和下边界分别存储在 `upper` 和 `lower` 变量中,并检查它们的大小关系。如果用户输入的上边界比下边界小,则交换它们的值,以确保下边界始终小于或等于上边界。 下面是这段代码的完整实现: ```python def isPalindromic(n): s = str(n) return s == s[::-1] def getInputs(): count = 0 while count < 3: try: upper = int(input("请输入区间的上边界:")) lower = int(input("请输入区间的下边界:")) if upper > lower: upper, lower = lower, upper return upper, lower except: print("输入有误,请重新输入!") count += 1 print("输入错误次数过多,程序退出!") exit() palindromic_list = [] upper, lower = getInputs() for i in range(lower, upper + 1): if isPalindromic(i): palindromic_list.append(i) total = sum(palindromic_list) print("区间[{},{}]中的回文数为:{}".format(lower, upper, palindromic_list)) print("它们的和为:{}".format(total)) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值