Codeforces Round #667 (Div. 3) D. Decrease the Sum of Digits 题解(思维)

   日期:2020-09-06     浏览:109    评论:0    
核心提示:题目链接题目大意就是给你一个正整数n看你加多少使得数位和少于s题目思路原来这么简单,直接模拟进位即可。代码#include#include#include#include#include#include#include#include#include

题目链接

题目大意

就是给你一个正整数n看你加多少使得数位和少于s

题目思路

原来这么简单,直接模拟进位即可。

代码

#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<vector>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
#define fi first
#define se second
#define debug printf(" I am here\n");
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int maxn=5e5+5,inf=0x3f3f3f3f,mod=1e9;
char s[20];
int sumdig,cnt[100];
signed main(){
    int _;scanf("%d",&_);
    while(_--){
        memset(cnt,0,sizeof(cnt));
        scanf("%s %d",s+1,&sumdig);
        int d=strlen(s+1),nowdig=0;
        ll last=0;
        for(int i=1;i<=d;i++){
            cnt[i]=s[i]-'0';
            nowdig+=cnt[i];
            last=last*10+cnt[i];
        }
        reverse(cnt+1,cnt+1+d);//注意reverse
        for(int i=1;i<=d;i++){
            if(nowdig<=sumdig) break;
            if(cnt[i]==0) continue;
            nowdig-=cnt[i];
            cnt[i]=0;
            for(int j=i+1;;j++){
                if(cnt[j]==9){
                    nowdig-=cnt[j];
                    cnt[j]=0;
                }else{
                    cnt[j]++;
                    nowdig++;
                    break;
                }
            }
        }
        ll ans=0;
        reverse(cnt+1,cnt+1+d+1);
        for(int i=1;i<=d+1;i++){//最多进一位
            ans=ans*10+cnt[i];
        }
        printf("%lld\n",ans-last);
    }
    return 0;
}
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服