poj 3982(水题,大数加法和大数乘法)
#include<iostream> #include<cstdio> #include<cstring> using namespace std; struct Node{ int data[1005]; int n; Node(){ n = 1; memset(data,0,sizeof data); } }; Node nPlus(Node n1,Node n2){ Node ans; int i,j,t,len,len2; len = min(n1.n,n2.n); len2 = max(n1.n,n2.n); for(i=0;i<len;i++){ ans.data[i] += n1.data[i]+n2.data[i]; if(ans.data[i]>=10){ ans.data[i+1] = ans.data[i]/10; ans.data[i] %= 10; } } if(n1.n>len){ for(i=len;i<len2;i++){ ans.data[i] += n1.data[i]; if(ans.data[i]>=10){ ans.data[i+1] = ans.data[i]/10; ans.data[i] %= 10; } } } else if(n2.n>len){ for(i=len;i<len2;i++){ ans.data[i] += n2.data[i]; if(ans.data[i]>=10){ ans.data[i+1] = ans.data[i]/10; ans.data[i] %= 10; } } } ans.n = len2; if(ans.data[ans.n]>0){ ans.n++; } return ans; } Node mul(Node n1,int m){ int i,j; if(m==0){ Node s; return s; } for(i=0;i<n1.n;i++){ n1.data[i] *= m; } for(i=0;i<n1.n;i++){ if(n1.data[i]>=10){ n1.data[i+1] += n1.data[i]/10; n1.data[i] %= 10; } } while(n1.data[i]>0){ if(n1.data[i]>=10){ n1.data[i+1] += n1.data[i]/10; n1.data[i] %= 10; } i++; } n1.n = i; return n1; } int main(){ int i,j; Node node[4],ans[4]; memset(ans,0,sizeof ans); memset(node,0,sizeof node); node[0].data[0] = 1; node[1].data[0] = 0; node[2].data[0] = 0; node[0].n = node[1].n = node[2].n = 1; for(i=4;i<=100;i++){ node[3] = nPlus(nPlus(node[2],node[1]),node[0]); node[0] = node[1]; node[1] = node[2]; node[2] = node[3]; } ans[0] = node[3]; memset(node,0,sizeof node); node[0].data[0] = 0; node[1].data[0] = 1; node[2].data[0] = 0; node[0].n = node[1].n = node[2].n = 1; for(i=4;i<=100;i++){ node[3] = nPlus(nPlus(node[2],node[1]),node[0]); node[0] = node[1]; node[1] = node[2]; node[2] = node[3]; } ans[1] = node[3]; memset(node,0,sizeof node); node[0].data[0] = 0; node[1].data[0] = 0; node[2].data[0] = 1; node[0].n = node[1].n = node[2].n = 1; for(i=4;i<=100;i++){ node[3] = nPlus(nPlus(node[2],node[1]),node[0]); node[0] = node[1]; node[1] = node[2]; node[2] = node[3]; } ans[2] = node[3]; int a0,a1,a2; while(scanf("%d%d%d",&a0,&a1,&a2)!=EOF){ Node tmp = mul(ans[0],a0); ans[3] = tmp; tmp = mul(ans[1],a1); ans[3] = nPlus(ans[3],tmp); tmp = mul(ans[2],a2); ans[3] = nPlus(ans[3],tmp); for(i=ans[3].n-1;i>-1;i--){ cout<<ans[3].data[i]; } cout<<endl; } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)