HBCPC Problem C超级密码

1841: 超级密码

描述

题目描述:

小明今年9岁了,最近迷上了设计密码!今天,他又设计了一套他认为很复杂的密码,并且称之为“超级密码”. 说实话,这套所谓的“超级密码”其实并不难:对于一个给定的字符串,你只要提取其中的数字,然后连在一起构成一个整数,再乘以小明的幸运数字513,就是解密后的结果了~比如,字符串“ads2d4,122”,提取后的整数是24122,然后乘以513,就能得到解密后的结果:12374586.注:题目保证解密后的结果在32位无符号整数范围.

输入:

输入首先包括一个正整数N,表示有N组测试用例. 每组数据占一行,包含一个长度不超过30的字符串.

输出:

请根据题目要求输出解密后的结果,每组数据输出一行.

样例输入
2
ads2d4,122
0023asdf2AA90
样例输出
12374586
11947770

现在看来,那个时候自己真是个小白,atoi这么好用的函数竟然不知道,还去手动实现,虽然手动实现并不困难,

但是还忘了给数组的末尾加上\0,不加\0的直接后果就是,该数组再次赋值时,会在上次应该加\0的位置赋值,

导致第二个数字过大直接溢出,第二个数字永远不对。

#include<stdio.h>
#include<string.h>
int main()
{
       char a[100];
    char b[31];
   // a="ads2d4,122";
    int k,i,j,l,r;
    int n=0;
    int N;
   scanf("%d",&n);
   getchar();//吸收回车
   for(k=0;k<n;k++)
   {
        N=0;
       gets(a);
        l=strlen(a);
        for(i=0;i<l;i++)
        {
            if(isdigit(a[i]))
            {
                b[N]=a[i];
                N++;
            }
        }
        b[N]='\0';//在末尾追加\0,否则会使数值过大,导致数值溢出,都是细节问题,细节决定成败!!
        // printf("%d\n",atoi(b,10));
        r=atoi(b,10)*513;
        printf("%d\n",r);

   }


}

测试点


通过率
通过的数据:
结果耗时内存
通过01736704
通过01536000

阅读更多 登录后自动展开
想对作者说点什么? 我来说一句
相关热词

没有更多推荐了,返回首页