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;
}

解决方案 »

  1.   

    可是我要是9999999999999999999999999999999999999999999999999999999999999999
    乘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还是小
      

  2.   

    要是象 zhanghw20030303(冰山一角)想的那样我直接INT C=A*B;多好呀~~还这么费事干嘛
      

  3.   

    你可以用Double正常情况下可以满足!
    但是如果超出这个范围。
    好像还是有办法的但我就不知道了
      

  4.   


    俺做过一摸一样的,以前在学校的时候老师布置的作业,时间太久,代码早删了,不好意思不过思路是跟你一样的,一位一位的乘,再加起来。你把每次得到的结果放到一个ArrayList中不就成了?
      

  5.   

    现在就放到arrayList里了可是再加起来的时候脑子就乱了`~
      

  6.   

    我在楼主的程序后面写了一段试了下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;刚开始试了几个数结果都正确,后来用几个连续的9试了下,比如9999*9999……发现程序报错,看了一下好像是楼主前面的有问题,list1里面的字符串居然长度不一样,第一个数要比其他的多一位,楼主可以自己试试……
      

  7.   

    改了一下正确了private string bigint(string n,string k)
    {
    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]的长度为准
      

  8.   

    TO:CSTerry(Terry) 
    呵呵~~~是我的问题~~~~我说的嘛我5个9乘5个9得到的结果怎么和正常的差了20几亿
    多谢了~~~
    现在给分了~~~我去另开个贴把他优化了。有兴趣来捧场呀