P1015 [NOIP1999 普及组] 回文数 题解

这道题,一上来先看数据范围:

2≤n≤10或n=16
m(100位之内)

看到100位,我们马上就想到:int、long long显然都不够,要用高精度加法!
首先,我们先写平常的高精加:


1、头文件框子。

#include<bits/stdc++.h>
/*
#include<iostream>
#include<cstring>
*/

using namespace std;

int main()
{
   
	return 0;
}

2、变量。

char s1[50],s2[50];//接收输入
int n1[50] = {
   0},n2[50] = {
   0},n3[50] = {
   0};
int num;
//n1,n2用来转换
//n3用来保存结果
//num为循环次数

3、输入。

cin>>s1>>s2;
//注意:字符串中如果有空格,不能使用cin,只能使用scanf()和gets()
//这里面没有空格,所以直接使用cin,是没有问题的

4、倒转字符串。
因为如果不倒转,进位时就会十分麻烦,需要所有的往后移一位,而且还要从后面往前循环。

for(int i = strlen(s1) - 1;i >= 0;i--)
	n1[strlen(s1) - 1 - i] = s1[i] - 48;//将s1转换成n1并倒转
for(int i = strlen(s2) - 1;i >= 0;i--)
	n2[strlen(s2) - 1 - i] = s2[i] - 48;//将s2转换成n2并倒转

n - 48的原因是字符数字和平常数字多了48,所以要-48。


5、判断数位。
这一步是为了知道后面的for循环此时是多少次。
知识:
strlen()是可以返回字符串实际长度的函数,在cstring库里。
strlen(s1)就可以返回s1的实际长度。
注意:填进strlen的必须为没转换过的s1、s2,不能用int数组n1和n2去strlen,因为这个函数只能用在字符串上,而不能用在int数组上!

if(strlen(s1) >= strlen(s2))
	num = strlen(s1);
else
	num = strlen(s2);

6、做加法。
这一步就是直接去循环每一个int数组里的数去做加

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值