69,380
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string same_sign(string s1, string s2);
string multiplication(string s1, string s2);
int main()
{
string s1;
//string s2;
string s3;
while (cin >> s1)
{
if (s1 == "0")
{
cout << "1" << '\n' << '\n';
continue;
}
s3 = "1";
for (string s = "1"; ; s = same_sign(s, "1"))
{
s3 = multiplication(s, s3);
if (s == s1)
{
cout << s3 << '\n' << '\n';
break;
}
}
}
return 0;
}
string multiplication(string s1, string s2)
{
string s3 = "";
//第二个数为大数
if (s1.length() > s2.length())
{
string str_temp = s1;
s1 = s2;
s2 = str_temp;
}
for (int i = 0; i < s1.length(); ++i)
{
string str_temp;
for (int j = 0; j < s1[i] - '0'; ++j)
str_temp = same_sign(str_temp, s2);
for (j = 0; j < i; ++j)
str_temp += '0';
s3 = same_sign(s3, str_temp);
}
return s3;
}
string same_sign(string s1, string s2)
{
string s3 = "";
if (s1.length() > s2.length())
{
string s = s1;
s1 = s2;
s2 = s;
}
reverse(s1.begin(), s1.end());
reverse(s2.begin(), s2.end());
bool flag = false;
for (int i = 0; i < s1.length(); ++i)
{
int n;
if (flag)
n = s1[i] - '0' + s2[i] - '0' + 1;
else
n = s1[i] - '0' + s2[i] - '0';
s3 += char(n % 10 + '0');
if (n >= 10)
flag = true;
else
flag = false;
}
if (flag && s1.length() == s2.length())
s3 += '1';
else if (flag && s1.length() < s2.length())
{
for (int i = s1.length(); i < s2.length(); ++i)
{
int n;
if (flag)
n = s2[i] - '0' + 1;
else
n = s2[i] - '0';
s3 += char(n % 10 + '0');
if (n >= 10)
flag = true;
else
flag = false;
}
if (flag)
s3 += '1';
}
else if (!flag && s1.length() < s2.length())
for (int i = s1.length(); i < s2.length(); ++i)
s3 += s2[i];
reverse(s3.begin(), s3.end());
return s3;
}
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int a[20000];
int fin[20000] = {0};
int n, array = 1, flag = 0;
cout << "input n: ";
cin >> n;
for(int k = 1; k <= n; k++)
{
memset(a, 0, 20000);
a[0] = 1;
for(int i = 1; i <= k; i++)
{
for(int j = 0; j < array; j++)
{
a[j] *= i;
a[j] += flag;
flag = a[j] / 10;
a[j] %= 10;
if(flag && j == array - 1)
array++;
}
}
flag = 0;
int x;
for(x = 0; x < array; x++)
{
fin[x] += a[x];
fin[x] += flag;
flag = fin[x] / 10;
fin[x] %= 10;
}
if(flag)
fin[x] = flag;
}
cout << "2^" << n << " = ";
array--;
for(;array >= 0; array--)
cout << fin[array];
cout << endl;
return 0;
}
以万来作为进制,用数组存储位数
#include<stdio.h>
int main( )
{
int n;
while( scanf("%d", &n) != EOF )
{
int j, i, k = 0, t = 0, p = 0; /*t表示当前计算结果有多少位,p是进位,i用来循环遍历当前计算结果的每一位*/
int sum = 0, s[ 16000 ] = { 0 };
s[ 0 ] = 1;
for(j = 1; j <= n; j++ )
{
for( i = 0; i <= t; i++ )
{
sum = s[ i ] * j + p;
p = 0;
if( sum > 9999 )
{
s[i] = sum % 10000;
p = sum / 10000;
if( t == i )
{
t++;
s[ t ] = 0;
}
}
else
s[ i ] = sum;
}
}
printf("%d", s[ t ]);
for( i = t - 1; i >= 0; i-- )
{
if ( s[ i ] < 10 ) printf("000");
else if ( s[ i ] < 100 ) printf("00");
else if ( s[ i ] < 1000 ) printf("0");
printf("%d", s[ i ]);
}
printf("\n");
}
return 0;
}