分解质因数
思想:如果一个数能被2整除,那么继续将除2之后的数进行分解。如果不能被2整除,那么也不能被其倍数(4,6,8,10…)整除。转为用2+1去分解。
#include<stdio.h>
void PrintPrim(int m,int n){
//将m进行分解
if(m<n) return;
if(m%n){
//如果m不能被n整除
PrintPrim(m,n+1);
}else{
//如果m能被n整除
printf("%d",n);
//将n作为因子输出
if(m != n)
//如果不是最后一个因子
printf(" * ");
PrintPrim(m/n,n);
//对m/n继续分解
}
printf("\n");
}
int main()
{
int num;
while(scanf("%d",&num)!=EOF){
if(num>=2)
{
printf("分解结果:");
PrintPrim(num,2);
}
else
printf("数字需要大于2");
}
return 0;
}
大数乘法
#include<stdio.h>
void BigNumMult(char *num1,char *num2,int len1,int len2)
{
int res[len1+len2];
memset(res,0,sizeof(res));
for(int i=len1 - 1; i>=0; i--)
for(int j=len2 - 1; j>=0; j--)
res[i+j+1] += (num1[i] - '0')*(num2[j] - '0');
//这里是 += 别忽略
//解决进位
for(int i = len1 + len2 - 1;i>0;i--)
if(res[i]>10){
res[i-1] += res[i]/10;
//进位
res[i] = res[i]%10;
//取个位
}
int i=0;
while(!res[i]) i++;
printf("%s * %s = ",num1,num2);
while(i<=len1+len2-1) printf("%d",res[i++]);
}
int main()
{
char *num1 = "123456";
char *num2 = "345678";
BigNumMult(num1,num2,6,6);
return 0;
}