private int bigint(string n,string k)
{
string s="";
int b = 0;
System.Collections.ArrayList list1=new ArrayList(),list2=new ArrayList();
for(int i=0;i<k.Length;i++)
{
for(int j=0;j<n.Length;j++)
{
for(int z=(n.Length+k.Length-2);z>(j+i);z--)
{
s+="0";
}
list1.Add(Convert.ToInt16(n[j].ToString(),10)*Convert.ToInt16(k[i].ToString(),10)+s);
s="";
}
}
for(int i=0;i<list1.Count;i++)
{
for(int j=list1[i].ToString().Length;j<n.Length+k.Length-1;j++)
{
list1[i]=list1[i].ToString().Insert(0,"0");
}
}
foreach(string e in list1)
{
b = b + Convert.ToInt32(e.ToString()) ;
}
return b;
}
{
string s="";
int b = 0;
System.Collections.ArrayList list1=new ArrayList(),list2=new ArrayList();
for(int i=0;i<k.Length;i++)
{
for(int j=0;j<n.Length;j++)
{
for(int z=(n.Length+k.Length-2);z>(j+i);z--)
{
s+="0";
}
list1.Add(Convert.ToInt16(n[j].ToString(),10)*Convert.ToInt16(k[i].ToString(),10)+s);
s="";
}
}
for(int i=0;i<list1.Count;i++)
{
for(int j=list1[i].ToString().Length;j<n.Length+k.Length-1;j++)
{
list1[i]=list1[i].ToString().Insert(0,"0");
}
}
foreach(string e in list1)
{
b = b + Convert.ToInt32(e.ToString()) ;
}
return b;
}
乘999999999999999999999999999999999999999999999999999999999999999999怎么办
上面的只是一个例子
接上面的程序我也试过
for(int i=n.Length+k.Length-2;i>=0;i--)
{
int x=0;
for(int j=0;j<list1.Count;j++)
{
x+=Convert.ToInt32(list1[j].ToString()[i].ToString(),10);
}
}
可是报错说INT32太小换LONG还是小
但是如果超出这个范围。
好像还是有办法的但我就不知道了
俺做过一摸一样的,以前在学校的时候老师布置的作业,时间太久,代码早删了,不好意思不过思路是跟你一样的,一位一位的乘,再加起来。你把每次得到的结果放到一个ArrayList中不就成了?
{
int R=Add; for(int j=0;j<list1.Count;j++)
{
R+=Convert.ToInt32(list1[j].ToString().Substring(i,1));
} if(R.ToString().Length>1)
{
s=s.Insert(0,R.ToString().Substring(1,1));
Add=Convert.ToInt32(R.ToString().Substring(0,1));
}
else
{
s=s.Insert(0,R.ToString().Substring(0,1));
Add=0;
} } return s;刚开始试了几个数结果都正确,后来用几个连续的9试了下,比如9999*9999……发现程序报错,看了一下好像是楼主前面的有问题,list1里面的字符串居然长度不一样,第一个数要比其他的多一位,楼主可以自己试试……
{
string s="";
System.Collections.ArrayList list1=new ArrayList(),list2=new ArrayList();
for(int i=0;i<k.Length;i++)
{
for(int j=0;j<n.Length;j++)
{
for(int z=(n.Length+k.Length-2);z>(j+i);z--)
{
s+="0";
}
list1.Add(Convert.ToInt16(n[j].ToString(),10)*Convert.ToInt16(k[i].ToString(),10)+s);
s="";
}
}
for(int i=0;i<list1.Count;i++)
{
for(int j=list1[i].ToString().Length;j<list1[0].ToString().Length;j++)
{
list1[i]=list1[i].ToString().Insert(0,"0");
}
} int Add=0; //保留进位值 for(int i=(list1[0].ToString().Length-1);i>=0;i--)
{
int R=Add; for(int j=0;j<list1.Count;j++)
{
R+=Convert.ToInt32(list1[j].ToString().Substring(i,1));
} if(R.ToString().Length>1)
{
s=s.Insert(0,R.ToString().Substring(1,1));
Add=Convert.ToInt32(R.ToString().Substring(0,1));
}
else
{
s=s.Insert(0,R.ToString().Substring(0,1));
Add=0;
} } return s;
}楼主第二个循环里面for(int j=list1[i].ToString().Length;j<n.Length+k.Length-1;j++)这里有错,最长的应该以list1[0]的长度为准
呵呵~~~是我的问题~~~~我说的嘛我5个9乘5个9得到的结果怎么和正常的差了20几亿
多谢了~~~
现在给分了~~~我去另开个贴把他优化了。有兴趣来捧场呀