自测-4 Have Fun with Numbers (20 分)

本文介绍了在解决一道英文编程题时遇到的挑战,包括处理超出int范围的大数、实现数字的两倍计算以及比较数组的方法。通过使用字符串存储数字并转化为int数组,采用小学数学的进位计算,以及特定方式对比数组,最终完成题目。代码实现中注意到了结尾判断的不足。
摘要由CSDN通过智能技术生成

这道题是英文的,咋一看很唬人,我们用翻译软件翻译一下就知道什么意思了。

在解这道题时,第一个坑是数字位数问题,C语言中int的取值范围为:-2147483648 ~ 2147483647,不符合条件,题目中最多可是要有20位数字。因此放弃使用int、double,使用字符串来保存数字,然后转化为int类型的数组。

第二个坑是二倍:这里用了小学数学的进位计算方法,想不出来的话,写一下就可以了。

第三个坑是如何比较两个数组。我想了半天无果,故参考其他博文的做法:使用循环来得出数组A中数字i有多少个,然后与2倍数组做对比。其中,如果2倍数组第0个数大于9,那么两个数字的排列肯定不同。

以下为代码:

#include <iostream>

using namespace std;
/*
calc a big number with over 20 digits
Sample Input:
1234567899
Sample Output:
Yes
2469135798
*/
void showNumber(int a[],int n)
{
    for(int i=0;i<n;i++)
    {
        cout<<a[i];/*<<'-';*/
    }
}

int timesOfNum(int a[],int len,int num)
{
    int counter=0;
    for(int i=0;i<len;i++)
    {
        if(a[i]==num)
            counter++;
    }
    return counter;
}
int
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值