首页 > 其他分享 >PAT Basic 1079. 延迟的回文数

PAT Basic 1079. 延迟的回文数

时间:2023-04-09 15:35:43浏览次数:58  
标签:10 PAT 1079 int 相加 number Basic 1006 回文

PAT Basic 1079. 延迟的回文数

1. 题目描述:

给定一个 \(k+1\) 位的正整数 \(N\),写成 \(a_k⋯a_1a_0\) 的形式,其中对所有 \(i\) 有 \(0≤a_i<10\) 且 \(a_k>0\)。\(N\) 被称为一个回文数,当且仅当对所有 \(i\) 有 \(a_i=a_{k−i}\)。零也被定义为一个回文数。

非回文数也可以通过一系列操作变出回文数。首先将该数字逆转,再将逆转数与该数相加,如果和还不是一个回文数,就重复这个逆转再相加的操作,直到一个回文数出现。如果一个非回文数可以变出回文数,就称这个数为延迟的回文数。(定义翻译自 https://en.wikipedia.org/wiki/Palindromic_number

给定任意一个正整数,本题要求你找到其变出的那个回文数。

2. 输入格式:

输入在一行中给出一个不超过1000位的正整数。

3. 输出格式:

对给定的整数,一行一行输出其变出回文数的过程。每行格式如下

A + B = C

其中 A 是原始的数字,BA 的逆转数,C 是它们的和。A 从输入的整数开始。重复操作直到 C 在 10 步以内变成回文数,这时在一行中输出 C is a palindromic number.;或者如果 10 步都没能得到回文数,最后就在一行中输出 Not found in 10 iterations.

4. 输入样例:

97152
196

5. 输出样例:

97152 + 25179 = 122331
122331 + 133221 = 255552
255552 is a palindromic number.
196 + 691 = 887
887 + 788 = 1675
1675 + 5761 = 7436
7436 + 6347 = 13783
13783 + 38731 = 52514
52514 + 41525 = 94039
94039 + 93049 = 187088
187088 + 880781 = 1067869
1067869 + 9687601 = 10755470
10755470 + 07455701 = 18211171
Not found in 10 iterations.

6. 性能要求:

Code Size Limit
16 KB
Time Limit
400 ms
Memory Limit
64 MB

思路:

编写两个子函数分别用于判断回文数和进行逆转相加的操作,逆转相加做好进位即可。这里因为给出的正整数有可能达到1000位,int类型存不下,所以必须存储为字符串。

第一次提交时testpoint6报Runtime Error,网站提示可能是数组越界访问造成的,检查了代码感觉逻辑无问题,将用于存储数字的字符数组大小改为1006时AC。开始的想法是两个数字最多为1000位,相加后存在进位的话最多为1001位,就将字符数组大小设为了1002,但是没有考虑到不满足回文数的话,数字会反复相加,就有可能超过1001位,这里逐渐增大到1006时AC。。。

My Code:

#include <stdio.h>
#include <string.h> // strlen header, strcpy header

#define MAX_LEN 1006 // 1006 is minimal value

int isPalindromic(const char *number);
void palindromicSum(char *number);

int main(void)
{
    char number[MAX_LEN] = "";
    int i=0; // iterator
    //char res[1002] = "";
    
    scanf("%s", number);
    
    if(isPalindromic(number)) // already panlindromic
    {
        printf("%s is a palindromic number.\n", number);
        return 0;
    }
    
    for(i=0; i<10; ++i)
    {
        palindromicSum(number);
        if(isPalindromic(number)) // become panlindromic
        {
            printf("%s is a palindromic number.\n", number);
            break;
        }
    }
    if(i==10)
    {
        printf("Not found in 10 iterations.\n");
    }
    
    //printf("%s\n", number);
    
    return 0;
}

int isPalindromic(const char *number) // 1 means true, 0 means false
{
    int i=0, j=0; // iterator
    
    for(i=0, j=strlen(number)-1; i<j; ++i, --j)
    {
        if(number[i] != number[j])
        {
            return 0;
        }
    }
    return 1;
}

void palindromicSum(char *number)
{
    char temp1[MAX_LEN] = "";
    int i=0; // iterator
    int carry = 0;
    int num1=0, num2=0;
    char temp2[MAX_LEN] = "";
    
    strcpy(temp1, number);
    for(i=0; i<strlen(temp1); ++i)
    {
        temp2[strlen(temp1)-1-i] = temp1[i];
    }
    
    for(i=0; i<strlen(temp1); ++i)
    {
        num1 = temp1[i] - '0';
        num2 = temp2[i] - '0';

        number[strlen(temp1)-1-i] = (num1+num2+carry)%10 + '0';
        carry = (num1+num2+carry)/10;
    }
    number[strlen(temp1)] = '\0';
    
    if(carry) // have carry bit
    {
        for(i=strlen(temp1); i>0; --i)
        {
            number[i] = number[i-1];
        }
        number[0] = '1';
        number[strlen(temp1)+1] = '\0';
    }
    
    printf("%s + %s = %s\n", temp1, temp2, number);
}

标签:10,PAT,1079,int,相加,number,Basic,1006,回文
From: https://www.cnblogs.com/tacticKing/p/17300365.html

相关文章

  • PAT Basic 1076. Wifi密码
    PATBasic1076.Wifi密码1.题目描述:下面是微博上流传的一张照片:“各位亲爱的同学们,鉴于大家有时需要使用wifi,又怕耽误亲们的学习,现将wifi密码设置为下列数学题答案:A-1;B-2;C-3;D-4;请同学们自己作答,每两日一换。谢谢合作!!~”——老师们为了促进学生学习也是拼了……本题就要求......
  • PAT Basic 1075. 链表元素分类
    PATBasic1075.链表元素分类1.题目描述:给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而[0,K]区间内的元素都排在大于K的元素前面。但每一类内部元素的顺序是不能改变的。例如:给定链表为18→7→-4→0→5→-6→10→11→-2,K为......
  • PAT Basic 1074. 宇宙无敌加法器
    PATBasic1074.宇宙无敌加法器1.题目描述:地球人习惯使用十进制数,并且默认一个数字的每一位都是十进制的。而在PAT星人开挂的世界里,每个数字的每一位都是不同进制的,这种神奇的数字称为“PAT数”。每个PAT星人都必须熟记各位数字的进制表,例如“……0527”就表示最低位是7......
  • docker push 遇到 no basic auth credentials
      当遇到上面问题时,请在本地先登录一下远程仓库: dockerlogin http://101.201.237.xxx:5000......
  • python-xpath,爬取猪八戒网(半成品)
    数据未进行清洗xpath  / 层级关系text() 拿文本//    https://blog.csdn.net/KELLENSHAW/article/details/127877476爬取https://task.zbj.com/hall/list-all-0-p1?kw=HTML先定位小盒子的div然后通过检查,xpath://*[@id="hall-list-wrap"]/div[4]/div[1]/div[1]/div[1]/d......
  • P9019 [USACO23JAN] Tractor Paths P
    ProblemLuoguP9019[USACO23JAN]TractorPathsPSolution首先有一个显然的结论,区间\(i\)向右能到的区间是\([i+1,RT_i]\),向左能到的区间是\([LT_i,i-1]\)。根据这个考虑倍增。定义跳一步表示从当前区间去到最远能去的区间。设\(f_{i,j}\)表示区间\(i\)向右跳\(j\)......
  • SqlServer中PATINDEX()函数
    SQLServer的PATINDEX()函数用于在字符串中查找某个模式的位置,并返回该模式第一个匹配项的起始位置。它接受两个参数:要查找的模式和要查找的字符串。下面是语法格式:PATINDEX('%pattern%',expression)其中,'%pattern%'是模式,expression是要查找的字符串。模式中可以含有通配......
  • PAT Basic 1073. 多选题常见计分法
    PATBasic1073.多选题常见计分法1.题目描述:批改多选题是比较麻烦的事情,有很多不同的计分方法。有一种最常见的计分方法是:如果考生选择了部分正确选项,并且没有选择任何错误选项,则得到50%分数;如果考生选择了任何一个错误的选项,则不能得分。本题就请你写个程序帮助老师批改多......
  • 什么是程序设计里的 backoff pattern
    Backoffpattern是一种程序设计模式,通常用于处理因高负载或故障而导致的请求失败或错误。该模式基于一种简单的策略,即当请求失败时,等待一段时间后重试,等待时间逐渐增加,直到成功或达到最大重试次数为止。在实际应用中,Backoffpattern通常会包含以下几个要素:初始等待时间:在第一......
  • PAT Basic 1072. 开学寄语
    PATBasic1072.开学寄语1.题目描述:下图是上海某校的新学期开学寄语:天将降大任于斯人也,必先删其微博,卸其QQ,封其电脑,夺其手机,收其ipad,断其wifi,使其百无聊赖,然后,净面、理发、整衣,然后思过、读书、锻炼、明智、开悟、精进。而后必成大器也!本题要求你写个程序帮助这所学校的......