关于一道程序填空题的疑惑#include#include#i-查字典问答网
分类选择

来自蔡国洋的问题

  关于一道程序填空题的疑惑#include#include#includeunsignedlongfun(char*s){unsignedlongt=0;intk;inti=0;i=strlen(s);for(--i;i>=0;i--){k=s[i]-'0';t=t*10+k;}returnt;}main(){charstr[8];printf("Enterastringmadeupof'

  关于一道程序填空题的疑惑

  #include

  #include

  #include

  unsignedlongfun(char*s)

  {

  unsignedlongt=0;

  intk;

  inti=0;

  i=strlen(s);

  for(--i;i>=0;i--)

  {

  k=s[i]-'0';

  t=t*10+k;

  }

  returnt;

  }

  main()

  {

  charstr[8];

  printf("Enterastringmadeupof'0'to'9'digitalcharacter:n");

  gets(str);

  printf("Thestringis:%sn",str);

  if(strlen(str)>8)

  printf("Thestringistoolong");

  else

  printf("Theresult:%lun",fun(str));

  }

  fun函数中的for循环里,为什么k=s[i]-'0'还有为什么t=k+10*t?

  感激不尽

1回答
2020-07-26 01:41
我要回答
请先登录
倪德明

  首先,输入的是字符!也就是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码值!

2020-07-26 01:44:48

最新问答

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  •