数位五五
链接:https://ac.nowcoder.com/acm/problem/22168
来源:牛客网
题目描述
求出a到b之间有多少个数数位之和为5的倍数
输入描述:
输入一行包含两个整数x,y (0 \le x, y \le 10000000≤x,y≤1000000)
输出描述:
输出一个整数
示例:
输入
10 20
输出
2
说明
14和19的数位和为5和10,符合条件
代码
#include<stdio.h>
#include<string.h>
int main(){
int a,b;
int sum = 0,count = 0;
char temp[7] = {'\0'}; //别忘了大括号
scanf("%d%d",&a,&b);
for(int i = a;i<b+1;i++){
sprintf(temp,"%d",i);
for(int j = 0;temp[j] != '\0';j++){
sum += temp[j] - '0';
}
if(sum%5 == 0 && sum != 0) count++;
sum = 0;
memset(temp,0,8); //清空字符串
}
printf("%d",count);
return 0;
}
总结:
1、C语言将把整数/长整数格式化成字符串,采用sprintf和snprintf函数。需要头文件string
int sprintf(char *str, const char *format, ...);
int snprintf(char *str, size_t size, const char *format, ...);
注意第一个参数是一个字符串,对于C语言来说就是字符数组。不能是int型的数组哦。
2、C语言把字符串转换为整数和长整数,采用atoi和atol函数。
3、清空字符串用memset()函数,memset(str, 0, sizeof(str));
4、其实太多函数也记不住,对一个数的每一位进行求和也可以用循环来写,不一定非得化成字符串。
while(i != 0){
sum += i%10;
i /= 10;
}
return sum;
5、把一个字符串变成整数。
num = 0;
for(int i = 0;i<strlen(str);i++){
num = num*10 + str[i];
}
return num;