string str_multiply(string str1,string str2)
{
string strres = "";
int len1 = str1.length();
int len2 = str2.length();
int num[500] = {0};
int i, j;
for(i = 0; i < len1; i++)
{
for(j = 0; j < len2; j++)
{
num[len1-1-i + len2-1-j] += (str1[i] - '0')*(str2[j] - '0');
}
}
for(i = 0; i < len1 + len2; i++)
{
num[i+1] += (num[i] / 10);
num[i] = num[i] % 10;
}
for(i = len1 + len2 - 1; i >= 0; i--)
{
if(0 != num[i]) break;
}
for(j = i; j >= 0;j--)
{
strres += (num[j] + '0');
}
return strres;
}
int compare(string str1, string str2, int pos)
{
int len1 = str1.length();
int len2 = str2.length();
if(len2 > len1+pos) return 0;
if(len2 < len1+pos) return 1;
int i;
for(i = 0; i < len2; i++)
{
if(str1[i]-'0' > str2[i]-'0') return 1;
if(str1[i]-'0' < str2[i]-'0') return 0;
}
return 0;
}
string strsqrt(string str)
{
int len = str.length();
int i, j;
string strres = "";
string str1 = "";
if(0 == len%2)
{
for(i = 0; i < len/2; i++)
{
for(j = 0; j < 10; j++)
{
str1 = strres;
str1 += (j + '0');
if(1 == compare(str_multiply(str1,str1) , str , 2*(len/2-i-1)))
{
strres += j-1+'0';
break;
}
if(9==j) strres += '9';
}
}
}
else
{
for(i = 0; i < len/2+1; i++)
{
for(j = 0; j < 10; j++)
{
str1 = strres;
str1 += (j + '0');
if(1 == compare(str_multiply(str1 , str1), str , 2*(len/2-i)))
{
strres += (j-1+'0');
break;
}
if(9 == j) strres += '9';
}
}
}
return strres;
}
大整数乘法&大整数开根号取整数部分
最新推荐文章于 2022-07-13 16:42:54 发布