C语言代码实现阶乘分解:算法解析及Go语言转换
#include<stdio.h> int main(){ int m,i,j,l=1,len=0,k=0; int ans[1000]={1},num[10000]={0}; scanf("%d",&m); if(m==3 || m==4){ printf("%d %d\n%d",1,m-1,m-1); }else{ for(i=2;;i++){ if(m>=i){ num[len++]=i; m-=i; }else break; } for(i=len-1;i>=0;i--){//对于剩余的数,从后往前依次加一 if(m>0){ num[i]++; m--; }else break; } for(i=0;i<len;i++){ for(j=0;j<l;j++){ ans[j]=ans[j]*num[i]+k; k=ans[j]/10000; ans[j]%=10000; } if(k){ ans[j]=k; k=0; l++; } } printf("%d",num[0]); for(i=1;i<len;i++) printf(" %d",num[i]);
printf("\n%d",ans[l-1]);
for(i=l-2;i>=0;i--)
printf("%d",ans[i]);
}
return 0;
}//转换成Go代码内容:package main
import "fmt"
func main() { var m, i, j, l, len, k int ans := make([]int, 1000) num := make([]int, 10000) fmt.Scan(&m) if m == 3 || m == 4 { fmt.Printf("%d %d\n%d", 1, m-1, m-1) } else { l = 1 len = 0 k = 0 for i = 2; ; i++ { if m >= i { num[len] = i len++ m -= i } else { break } } for i = len - 1; i >= 0; i-- { if m > 0 { num[i]++ m-- } else { break } } for i = 0; i < len; i++ { for j = 0; j < l; j++ { ans[j] = ans[j]*num[i] + k k = ans[j] / 10000 ans[j] %= 10000 } if k != 0 { ans[j] = k k = 0 l++ } } fmt.Printf("%d", num[0]) for i = 1; i < len; i++ { fmt.Printf(" %d", num[i]) } fmt.Printf("\n%d", ans[l-1]) for i = l - 2; i >= 0; i-- { fmt.Printf("%d", ans[i]) } }
原文地址: https://www.cveoy.top/t/topic/pyOj 著作权归作者所有。请勿转载和采集!