zoukankan      html  css  js  c++  java
  • http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2633

    大数

    题意描述:输入N组数据,计算每一个比该数大并且每位数字之和可被十整除的最小数字,例如202     2+0+2=4,10-4=6,所以208符合题意;

    1:若最后一位数字加上补齐的数字之和依然不大于9,就比如202的例子可直接输出加上6的结果208;

    2:若大于9则有分为两种情况(1)从第一位一直进到最后一位就像999998,每位之和44此时结果只有一种情况符合也就是1000009,直接输出之;(2)进位没有进到最后在这里我举例说明比如80998 sum=34 只需再加6 ,然后6+8=14 每进一位这个14必须减一才可以符合题目要求,所以用一个bit 变量记录进了几位 然后减之 后面的公式就出现了用a【len-1】保存14,每进一位就减一最后对10取余就ok了,对于加100000的意思是,此题不会超过十万位,因此进位的bit变量是很大的,这个十万是为了中和其中相减所产生的负值,比如进位bit=74,然后啊a【len-1】不会超过20,这样一减就成负值了。公式:a[len-1]=(a[len-1]+100000-bit)%10;

    代码:

     1 #include<stdio.h>
     2 #include<string.h>
     3 int main()
     4 {
     5     int n, i,len,ans;
     6     int sum;
     7     char ch[100050];
     8     int a[100050];
     9     scanf("%d",&n);
    10     while(n--)
    11     {
    12         sum=0;
    13         scanf("%s",ch);
    14         len=strlen(ch);
    15         for(i=0; i<len; i++)
    16         {
    17             a[i]=ch[i]-'0';
    18             sum+=a[i];
    19         }
    20 
    21         ans=10-sum%10;
    22         a[len-1]+=ans;
    23         int bit=0;
    24         if(a[len-1]>9)
    25         {
    26             for(i=len-2; i>=0; i--)
    27             {
    28                 bit++;
    29                 a[i]++;
    30                 a[i]%=10;
    31                 if(a[i])
    32                     break;
    33             }
    34             if(i<0)
    35             {
    36                 printf("1");
    37                 for(i=0; i<=len-2; i++)
    38                     printf("0");
    39                 printf("9");
    40             }
    41             else
    42             {
    43                 a[len-1]=(a[len-1]+100000-bit)%10;
    44                 for(i=0; i<len; i++)
    45                     printf("%d",a[i]);
    46             }
    47         }
    48         else
    49         {
    50             for(i=0; i<len; i++)
    51                 printf("%d",a[i]);
    52         }
    53         printf("
    ");
    54     }
    55     return 0;
    56 }
  • 相关阅读:
    [SpringCloud] Hystrix原理及应用
    Excel框设置下拉选项
    The program no longer exists.
    win10 指纹登录修改用户密码
    git 比较两个分支内容差异
    C++ 已知两个时间(年月日)求日期差
    SELECT INTO 和 INSERT INTO SELECT 两种表复制语句详解(SQL数据库和Oracle数据库的区别)
    SQL Server查询优化方法
    xshell连接ubuntu虚拟机的方法
    beyond compare添加Java反编译插件
  • 原文地址:https://www.cnblogs.com/wlc297984368/p/3250254.html
Copyright © 2011-2022 走看看