大家好,欢迎来到IT知识分享网。
提示:以下是本篇文章正文内容,下面案例可供参考
一、千位分隔符是什么?
千位分隔符其实就是一个逗号,在数字中,每三位后添加一个千位分隔符;
示例:,添加千位分隔符的结果为:123,456,789
二、思考逻辑
1.方法一:while循环
代码如下(示例):
int i = 0; int j = 0; int main() { long long n = 0; scanf("%lld", &n); char arr[100]; while (n>=1) { i++; if (i % 4 != 0) { arr[j] = n % 10 + '0'; } else { arr[j] = ','; arr[++j] = n % 10 + '0'; } if (n/10!=0) { j++; } n = n / 10; } int k = 0; for (k = j; k >= 0; k--) { printf("%c", arr[k]); } return 0; }
(1)首先,要想实现最后输出带千位分隔符的数字,那么需要利用数组,并且因为C语言数组内部的元素一定是相同数据类型的元素,因此我们不能用整型数组来存储这些元素,所以我们应该用字符数组来接收这些元素;
并且由于所输入的数字可能有小数,而小数部分是不需要添加千位分隔符的,所以我们直接将需要输入的数字的数据类型定义为long long 类型,就能够直接将小数部分去掉,变为整型;
所以我们创建一个字符类型的数组,且要保证创建的数组的大小足够大,char arr[100];
(2)每隔三个元素,就要添加一个千位分隔符,并且要从数字最右边来算,每隔三个数字,添加一位,那么我们首先想到利用循环!并且要获取一个数最后一位的数字,那么我们可以利用取余运算符。但是获得的仍然是整型数据,因此我们需要把整型数据转化为字符类型:+‘0’即可;
而i%4!=0;实现每三个元素的循环处理;
n=n/10,直到n为一位数时,才不再进行j++;
并且要主义,n=n/10这个条件要放在if条件语句外面,否则的话,当n为一位数时,就无法进行下一次的循环,第一位数也就不能被赋值给相应的a[j];
2.方法二——利用函数递归
代码如下(示例):
int i = 1, j = 0; void recombination(char a[], long long n) { if (i % 4 != 0) { a[j] = n % 10 + '0';//整型加上‘0’就变成对应的字符类型的数据; } else { a[j] = ','; a[++j] = n % 10 + '0'; i++; } if (n / 10 != 0) { j++; i++; recombination(a, n / 10); } } int main() { long long k, n; char a[100]; scanf("%lld", &n); if (n < 0) { printf("-"); n = -1 * n; } recombination(a, n); for (k = j; k >= 0; k--) printf("%c", a[k]); return 0; } 第二种方法,其实与第一种while循环的思想一致,不过是,循环条件换成了递归!
在这里还有局部变量与全局变量的区别问题;在这里,i与j都定义在main()主函数的外部,是全局变量,所以在函数内部,对于这两个变量的值进行修改,在到函数内部,这个值依然不会被销毁,依然可以继续使用;
最终的数组打印一定要从最后开始打印即倒着打印,才能得到正确顺序的结果!
总结
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/118832.html