C++ 输入格式:二个正整数 a b ( 1 ≤ a ≤ b ≤ 2100000000 ) 输出格式:一个数,表
来源:学生作业帮 编辑:搜狗做题网作业帮 分类:综合作业 时间:2024/07/08 09:00:06
C++ 输入格式:二个正整数 a b ( 1 ≤ a ≤ b ≤ 2100000000 ) 输出格式:一个数,表
区间数字相加
输入格式:二个正整数 a b ( 1 ≤ a ≤ b ≤ 2100000000 )输出格式:一个数,表示区间 [a,b] 上各数的各位上数字累加和输入样例:998 1002输出样例:59样例说明:共有 998、999、1000、1001、1002 五个数 (9+9+8)+(9+9+9)+(1+0+0+0)+(1+0+0+1)+(1+0+0+2) = 59
区间数字相加
输入格式:二个正整数 a b ( 1 ≤ a ≤ b ≤ 2100000000 )输出格式:一个数,表示区间 [a,b] 上各数的各位上数字累加和输入样例:998 1002输出样例:59样例说明:共有 998、999、1000、1001、1002 五个数 (9+9+8)+(9+9+9)+(1+0+0+0)+(1+0+0+1)+(1+0+0+2) = 59
这是一道ACM的编程题吧,发给你一份参考参考吧,希望对你有帮助,此份已AC.#include<cstdio>
#include<cstring>
long long num[10];
long long NUM[10];
void S1(int value)
{
int a=value;
int weight=1,left=value/10,right=a%weight;
int S=value%10;
value/=10;
while(value!=0)
{
for(int k=0; k<=9; k++)
{
if(k==0)
{
if(S==0) num[0]+=(left-1)*weight+right+1;
else if(S>0) num[0]+=left*weight;
}
else
{
if(S>k)
num[k]+=(left+1)*weight;
else if(S==k)
num[k]+=left*weight+right+1;
else if(S<k)
num[k]+=left*weight;
}
}
weight*=10;
left=value/10;
right=a%weight;
S=value%10;
value/=10;
}
//最高位
for(int k=0; k<=9; k++)
{
if(k==0)
{
if(S==0) num[0]+=(left-1)*weight+right+1;
else if(S>0) num[0]+=left*weight;
}
else
{
if(S>k)
num[k]+=(left+1)*weight;
else if(S==k)
num[k]+=left*weight+right+1;
else if(S<k)
num[k]+=left*weight;
}
}
return ;
}
int main()
{
int a,b;
while(scanf("%d %d",&a,&b)!=EOF && a && b)
{
memset(num,0,sizeof(num));
memset(NUM,0,sizeof(NUM));
if(a>b)
{
int temp=a;
a=b;
b=temp;
}
S1(a-1);
for(int i=0; i<10; i++)
NUM[i]=num[i];
memset(num,0,sizeof(num));
S1(b);
for(int i=0; i<10; i++)
printf("%lld%c",num[i]-NUM[i],i==9?'\n':' ');
}
return 0;
} 以上代码求出的就是[A,B]之间0-9每个数出现的次数.按照你的要求只需要对num[i] - NUM[i]的差值求和就是了.也就是把74-75行改为一下代码:long long sum = 0;
for(int i=0; i<10; i++)
sum += num[i]-NUM[i];
printf("%lld\n", sum); //输出的值就是题目的要求.
#include<cstring>
long long num[10];
long long NUM[10];
void S1(int value)
{
int a=value;
int weight=1,left=value/10,right=a%weight;
int S=value%10;
value/=10;
while(value!=0)
{
for(int k=0; k<=9; k++)
{
if(k==0)
{
if(S==0) num[0]+=(left-1)*weight+right+1;
else if(S>0) num[0]+=left*weight;
}
else
{
if(S>k)
num[k]+=(left+1)*weight;
else if(S==k)
num[k]+=left*weight+right+1;
else if(S<k)
num[k]+=left*weight;
}
}
weight*=10;
left=value/10;
right=a%weight;
S=value%10;
value/=10;
}
//最高位
for(int k=0; k<=9; k++)
{
if(k==0)
{
if(S==0) num[0]+=(left-1)*weight+right+1;
else if(S>0) num[0]+=left*weight;
}
else
{
if(S>k)
num[k]+=(left+1)*weight;
else if(S==k)
num[k]+=left*weight+right+1;
else if(S<k)
num[k]+=left*weight;
}
}
return ;
}
int main()
{
int a,b;
while(scanf("%d %d",&a,&b)!=EOF && a && b)
{
memset(num,0,sizeof(num));
memset(NUM,0,sizeof(NUM));
if(a>b)
{
int temp=a;
a=b;
b=temp;
}
S1(a-1);
for(int i=0; i<10; i++)
NUM[i]=num[i];
memset(num,0,sizeof(num));
S1(b);
for(int i=0; i<10; i++)
printf("%lld%c",num[i]-NUM[i],i==9?'\n':' ');
}
return 0;
} 以上代码求出的就是[A,B]之间0-9每个数出现的次数.按照你的要求只需要对num[i] - NUM[i]的差值求和就是了.也就是把74-75行改为一下代码:long long sum = 0;
for(int i=0; i<10; i++)
sum += num[i]-NUM[i];
printf("%lld\n", sum); //输出的值就是题目的要求.
c语言 最大公约数【问题描述】从键盘依次输入3个正整数a、b、c,依次分别输出a和b两数、b和c两数、c和a两数及其最大
c语言分数化小数输入正整数啊a,b,c,输出a/b的小数形式,精确到小数点后c位.a,b≤10^6,c≤100,.例如a
C语言 输入正整数a,b,c,输出a/b的小数形式,保留小数点后c位.a,b
输入a,b,c三个数,输出最大值和最小值.
在scanf()函数的格式说明符中,长整型数的输入格式符是 A.%ld B.%lf C.%d D.%x
输入二个整数a和b,若这两个数(或一个数)大于100,则输出一百位以上的数字.若
输入格式输入包含一系列的a和b对,通过空格隔开.一对a和b占一行.输出对于输入的每对a和b,你需要依次输出a、b的和.如
c语言题目:输入正整数a,b,c,输出a/b的小数形式,精确到小数点后c位.例如a=1,b=6,c=4时应输出0.166
用VB编写程序,输入一个正整数n,求所有大于1且小于n,同时与n互质的数,存入一个数组并每行5个的格式输出
用IF THEN 语句帮忙编个输入A,B,C,D 四个数,输出最大值的的算法!
输入一个正整数n(1≤n≤6)和n 阶矩阵a 中的元素,如果a 是上三角矩阵,输出“YES”;否则,输出“NO”
C语言编个计算题,只要输入一个数 ,a方加上b平方输出最后结果就好