HDOJ1002 大数加法
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n, ca = 1;
scanf("%d", &n);
while(n--)
{
string a, b;
vector<int> va, vb, sum;
cin >> a >> b;
int msize = max(a.size(), b.size());
sum.resize(msize + 1);
string::reverse_iterator it;
for(it = a.rbegin(); it != a.rend(); it++)
va.push_back( *it - '0' );
for(it = b.rbegin(); it != b.rend(); it++)
vb.push_back( *it - '0' );
if(va.size() < vb.size())
{
int m = vb.size() - va.size();
while(m--)
va.push_back(0);
}
else
{
int m = va.size() - vb.size();
while(m--)
vb.push_back(0);
}
int flag = 0;
for(int i = 0; i < msize; i++)
{
int t = va[i] + vb[i] + flag;
if(t > 9)
{
flag = 1;
t = t % 10;
}
else flag = 0;
sum[i] = t;
}
if(ca != 1)
printf("\n");
printf("Case %d:\n", ca++);
cout << a << " + " << b << " = ";
vector<int>::reverse_iterator itv = sum.rbegin();
for(;;)
{
if(!*itv) itv++;
else break;
}
for(; itv != sum.rend(); itv++)
cout << *itv;
printf("\n");
}
return 0;
}
HDOJ1042 算10000以下数字的阶乘
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 35660 + 1;
int main()
{
int n;
while(~scanf("%d",&n))
{
int s[MAXN];
memset(s, 0, sizeof(s));
s[MAXN-1] = 1;
for(int i=2; i<=n; i++)
{
int flag = 0;
for(int j=MAXN-1; j>=0; j--)
{
int t = s[j] * i + flag;
s[j] = t % 10;
flag = t / 10;
}
}
int t;
for(t=0; t<MAXN; t++)
if(s[t]) break;
for(; t<MAXN; t++)
printf("%d", s[t]);
printf("\n");
}
return 0;
}