2015-10-15 288 views
-1

确定大家,所以我有一个9位数字的输入(123456789),我需要将它分解为第一个中间和最后三个数字(123,456,789)。 我知道我可以使用模取得最后三位数。我不知道如何得到其他两组。 任何帮助,将不胜感激。将9位数字转换为3位3位数字

更新! 感谢milevyo答案,我设法弄明白了。现在代码怪胎在那里,我是一个初学者程序员,我想问什么是更有效的方式来编写此代码(下面),也许使用较少的变量或其他一些technique.I没有改变它烧焦,因为我们不能因为我们仍然是“还没有学会了”

 scanf("%d" , &input_number); 
    last_group_of_three = input_number % 1000; 
    temp = (input_number-last_group_of_three)/1000; 
    middle_group_of_three = temp % 1000; 
    first_group_of_three = (temp-middle_group_of_three)/1000; 
+0

你到现在为止尝试了什么? – skypjack

+1

除以1000并使用模数。 – Barmar

+1

呃......分开。这是一个四年级的数学问题,而不是编程问题。 –

回答

1
first_group_of_three = input number % 1000; 
shift=(input number-first_group_of_three)/1000 

second_group_of_three = shift % 1000; 

and so on 
+2

为什么不只是'shift = input number/1000;'? – chux

+0

如果有人想使用float而不是int,结果是什么? – milevyo

+1

如果想要使用'float','输入数字%1000'不会被编译 - 所以'input number/1000'的结果是不相关的。 ''fmodf()'将被用来代替'%'。所以这是确定OP的代码是使用整数。 – chux

0

您可以输入一个字符表中的数字为字符串,然后将前3个数字将保留第4个字符的char','第5,6,7个字符将成为接下来的3个数字等等。因此,您最终会创建字符串“123,456,789”,然后打印。

1

简化:@Barmar

scanf("%d", &input_number); 

last_group_of_three = input_number % 1000; 
input_number /= 1000; 

middle_group_of_three = input_number % 1000; 
input_number /= 1000; 

// % 1000 only if original input exceeded 9 digits 
first_group_of_three = input_number % 1000; 

注:许多编译器将优化% 1000/ 1000成一个单一的操作提供了两个结果:余&商。

(OP没有提及哪些代码应该对负数做什么。)