pat-1136. A Delayed Palindrome (20) 模拟

本可以java大数就能搞定的问题
当时用java写完答案明明对了提交总是答案错误
很是无语

题意

任给我们一个数
让我们对这个数进行翻转相加
如果加和是个回文数 就找到了程序出口
如果不是继续迭代
输出过程 如果迭代10次没有找到就输出特定信息

分析

就是模拟高精度加法
场上没想清楚为什么要那么加
两个数相加只可能比原数多进一位
完全可以用正序和逆序两个数组里一加
不必管 低位高位 对齐的情况
因为是一个数与自己的逆序相加 所以一定位数相同且从低位加还是从高位加结果相同
如果是不同数的加法或是乘法
我们需要从两个数的最高位置 向低位运算 因为高位为原数据的低位
所以最后再反向输出

code

#include<bits/stdc++.h>
using namespace std;
char a[1010],b[1010];
bool check(char aa[]){
    int len = strlen(aa);
    for(int i=0;i<len-1-i;i++){
        if(aa[i]!=aa[len-1-i])return 0;
    }
    return 1;
}//回文检验
int main()
{
    gets(a);
    bool f=0;
    int c=0;
    while(!check(a)){
        if( c==10 ){
            printf("Not found in 10 iterations.");
            f=1;
            break;
        }
        int lena = strlen(a)-1,tag=0;
        for(int i=lena;i>=0;i--){
            b[tag++] = a[i];
        }//将原数逆序 
        b[tag] = '\0';

        printf("%s + %s",a,b);
        int i,y = 0;
        for(i=0;i<=lena;i++){//模拟加法
            int dig = (a[i]-'0')+(b[i]-'0')+y;
            a[i] = '0'+dig%10;
            if(dig>9)y=1;
            else y = 0;
        }
        if(y)a[i] = '0'+y,a[++i] = '\0';//余数处理
        else a[i] = '\0';//行尾结束控制
        i--;//找回重点
        for(int j=0;j<i-j;j++){//把顺序换回来
            swap(a[j],a[i-j]);
        }       
        printf(" = %s\n",a);
        c++;
    }
    if(!f)printf("%s is a palindromic number.",a);
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值