问题:用户输入两个数字:一个大数字,一个小数字。 较小的数字是将转移到前面的最后一位数字的位数,其余数字将跟随。 例如:如果大数字是456789而小数字是3,结果将是:789456。 我的想法如下:
if(...) {
newNum = BigNumber%(10*SmallNumber);
printf("%d", remainder");
SmallNumber--;
}
但它没有按照我希望的顺序打印,逐位数字,我无法理解为什么。
如果允许使用数组,那就没问题了。此外,我不允许使用string.length
,这也使它更容易。
答案 0 :(得分:2)
旋转数字可以作为剪切,移位和添加的组合执行。例如,如果您有一个123456789
号码,并且需要按3
进行轮播,则可以按以下步骤操作:
789000000
789000000 + 123456
以获得结果789123456
。以下是对十进制数字执行这些操作的方法:
k
10 k %
个数字的操作
k
数字相当于整数除以10 k k
位相当于乘以10 k 答案 1 :(得分:0)
我认为以下代码可以帮助您 -
//Here size = number of digits in bignumber-1
while(smallnumber--) {
temp = (bignumber - bignumber%pow(10,size))/(pow(10,size);
bignumber = bignumber%pow(10,size);
bignumber = bignumber*10 + temp;
}
答案 2 :(得分:0)
试试这个版本:
#include <stdio.h>
#include <math.h>
int main(void)
{
long int num = 34234239;
int swap = 5, other;
long int rem = num % (int)(pow(10,swap)); /*The part that is shifted*/
other = log10(num-rem)+1-swap; /*Length of the other part*/
/* Result = (part to shift)*(Other part's length) + (Other part)*(Shifts) */
num = rem*(int)pow(10,other) + (num-rem)/(int)pow(10,swap);
printf("%ld\n",num);
return 0;
}