I-number

Description

The I-number of x is defined to be an integer y, which satisfied the the conditions below: 
1. y>x; 
2. the sum of each digit of y(under base 10) is the multiple of 10; 
3. among all integers that satisfy the two conditions above, y shouble be the minimum. 
Given x, you're required to calculate the I-number of x.
 

Input

An integer T(T≤100) will exist in the first line of input, indicating the number of test cases. 
The following T lines describe all the queries, each with a positive integer x. The length of x will not exceed 10  5
 

Output

Output the I-number of x for each query.
 

Sample Input

       
       
1 202
 

Sample Output

       
       
208
 



题目大意:
就是求一个比X大的数,要求各个位之和是10的倍数。应把每位的数相加。
对此以无力吐槽,就一个高精度,就能A掉。

代码:
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <vector>
#include <queue>
#include <cstdio>
#include <cmath>
#include <string>
#include <stack>
#include <cctype>
using namespace std;


void Add(char *str1, char *str2, char *str3)
{
    // str3 = str1 + str2;
    int i, j, i1, i2, tmp, carry;
    int len1 = strlen(str1), len2 = strlen(str2);
    char ch;
    i1 = len1-1;
    i2 = len2-1;
    j = carry = 0;
    for( ; i1 >= 0 && i2 >= 0; ++j, --i1, --i2 )
    {
        tmp = str1[i1]-'0'+str2[i2]-'0'+carry;
        carry = tmp/10;
        str3[j] = tmp%10+'0';
    }
    while( i1 >= 0 )
    {
        tmp = str1[i1--]-'0'+carry;
        carry = tmp/10;
        str3[j++] = tmp%10+'0';
    }
    while( i2 >= 0 )
    {
        tmp = str2[i2--]-'0'+carry;
        carry = tmp/10;
        str3[j++] = tmp%10+'0';
    }
    if( carry ) str3[j++] = carry+'0';
    str3[j] = '\0';
    for( i=0, --j; i < j; ++i, --j )
    {
        ch = str3[i];
        str3[i] = str3[j];
        str3[j] = ch;
    }
}

char a[100005];
char b[100005];
int main()
{
  int t;
  __int64 sum;
  scanf("%d",&t);
  while(t--)
  {
      sum=0;
      scanf("%s",a);
     while(1)
      {
          sum=0;
          Add(a,"1",b);
          strcpy(a,b);
          int len=strlen(b);
          for(int kk=0;kk<len;kk++)
            sum+=b[kk]-'0';
          if(sum%10==0)
            break;
      }
      printf("%s\n",b);
  }

    return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值