问题描述
- 这个问题该怎么玩?求大神相助!
- 书写一个任意正整数拆分的功能。拆分为:100503010987654321
拆分规则 从大到小,如276 拆分为 1001005010106
求解决方法和代码啊!
解决方案
把你的拆分因子放倒一个数组,然后用贪心算法对将要拆分的数字从最大的因子开始试探,如果可以减出来,就减出来继续拆分余下的;不过不能拆分,就改用次大的因子;如此循环就行了。问题解决记得选为正确答案哦
解决方案二:
你的拆分规则不明确奥,只需要拆分成从大到小的整数?如果是这样的话除10取余不就行了吗?
int num = 279;
int count = 0;
do{
printf(""%d""(num%10)*10^count);
count++;
}while((num=num/10)>0)
解决方案三:
int max(int Dataint Bitsint *Arraysint *ArraysCom)
{
if (Data > 0)
{
ArraysCom[Bits] = Data / Arrays[Bits];
Data = Data%Arrays[Bits];
if (Bits == 5)
ArraysCom[Bits] = Data;
return Data;
}
return 0;
}
void printfNumber(int sort int number)
{
if (number <= 0) return;
for (int i = 0; i < number; i++)
{
printf(""%d "" sort);
}
}
int main()
{
int CommonData[5] = { 100 50 30 101};
int Data Common[5] = {0};
while (!scanf_s(""%d"" &Data))
{
//fflush(stdin);
printf(""n输入错误,请重新输入:n"");
}
for (int i = 0; i < 5; i++)
{
Data = max(Data i CommonData Common);
}
for (int i = 0; i {
switch (i)
{
case 0:
printfNumber(100 Common[i]);
break;
case 1:
printfNumber(50 Common[i]);
break;
case 2:
printfNumber(30 Common[i]);
break;
case 3:
printfNumber(10 Common[i]);
default:
break;
}
}
if (Common[4]>0)
printf(""%d"" Common[4]);
return 0;
}