关于一道程序填空题的疑惑#include #include #include unsigned long fun(char *s){unsigned long t = 0;int k;int i = 0;i = strlen(s);for (--i; i>=0; i--){k = s[i]-'0';t = t*10+k;}return t;}main(){char str[8];printf("Enter a string made up of '

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/01 22:11:52
关于一道程序填空题的疑惑#include #include #include unsigned long fun(char *s){unsigned long t = 0;int k;int i = 0;i = strlen(s);for (--i; i>=0; i--){k = s[i]-'0';t = t*10+k;}return t;}main(){char str[8];printf(

关于一道程序填空题的疑惑#include #include #include unsigned long fun(char *s){unsigned long t = 0;int k;int i = 0;i = strlen(s);for (--i; i>=0; i--){k = s[i]-'0';t = t*10+k;}return t;}main(){char str[8];printf("Enter a string made up of '
关于一道程序填空题的疑惑
#include
#include
#include
unsigned long fun(char *s)
{
unsigned long t = 0;
int k;
int i = 0;
i = strlen(s);
for (--i; i>=0; i--)
{
k = s[i]-'0';
t = t*10+k;
}
return t;
}
main()
{
char str[8];
printf("Enter a string made up of '0' to '9' digital character :\n");
gets(str);
printf("The string is :%s\n",str);
if (strlen(str) > 8)
printf(" The string is too long ");
else
printf("The result :%lu\n",fun(str));
}
fun函数中的for循环里,为什么k=s[i]-'0'还有为什么t=k+10*t?
感激不尽

关于一道程序填空题的疑惑#include #include #include unsigned long fun(char *s){unsigned long t = 0;int k;int i = 0;i = strlen(s);for (--i; i>=0; i--){k = s[i]-'0';t = t*10+k;}return t;}main(){char str[8];printf("Enter a string made up of '
首先,输入的是字符!也就是8位以内的数字是字符,后面的输出的是%lu(无符号长整型),类型不同,明显不能直接转换!
函数fun(str)的作用就是将字符串的8位数,转换成无符号的长整型!
转换的方式是把字符串中的每一位上的数字取出来,然后加起来(数字ab=十位数a*10+个位数b,如56=5*10+6),这个算法自己理解!
至于k=s[i]-'0'就是把对应的字符型数字s[i],转换成整形的s[i],字符型在强制转换成整形的时候,值等于字符型对应的ascii码值,同时,0-9的ascii码值是连续的,所以字符s[i]对应的数字值,等于字符s[i]对应的ascii码值减去0对应的ascii码值!