把int类型值转换成int数组(不通过string类型转换)

只适合初学者

今天同事问了我不通过string类型把int类型值123589转换成int[]数组。我想了想于是写了出来,其实不难。看你小学数学学得好不好。言归正传。

先不说代码,举个列子就知道怎么玩了。在C#里1235/1000的整数是1,1235%123的余数是5.123%12余数是3,这样看是不是知道了。什么道理了?

int i=123589 它的i.tostring().length是6.所以我们要用123589/100000的到它的整数1.但是这100000这怎么来呢。int的值可能会变。所以我们先写个算法来根据int i的值长度,来得1后面0的位数 

public string Getint(int i)//i 是i.tostring().lenght值

{

 string count = "1";

  for(int j=1;j<i.tostring().length;j++)

  {

    count+="0";

  }

  retunrn Convert.ToInt32(count);

}

我们就要命名一个数组

int [] arry=new int[i.tostring().length]();//这个用来存放转换int数组值得

int arrybak=new int[i.tostring().length]();这个用来存放每次被除的数记录如123/10=12

我们在命令一个int main=1这个是自增长的。当我们遍历int i=123589.i.tostring().length值得时候自增长。遍历一次。i的length就减去1.这样就用.i的length-main。看下面代码:

for (int j = 0; j < i.ToString().Length; j++)
{
if (j > 0)
{
if (j >2)//判断j是不是2位数。因为两位数的余数就是(i / icount)%10大于2位以上的相反
{
arry[j] = (i / icount) % arrybak[j - 1];
arrybak[j] = (i / icount);
}
else
{
arry[j] = (i / icount)%10;
arrybak[j] = (i / icount);
}
}
else
{
arry[j] = (i / icount);
arrybak[j] = (i / icount);
}
icount = Getint(i.ToString().Length - main);
main++;
}

这样也许说的不是很清楚所以我把所有代码贴在下面。希望大家参考

static void Main(string[] args)
{

int i = 153589;
int icount = Getint(i.ToString().Length);
int[] arry = new int[i.ToString().Length];
int[] arrybak = new int[i.ToString().Length];
int main = 1;
for (int j = 0; j < i.ToString().Length; j++)
{
if (j > 0)
{
if (j >2)
{
arry[j] = (i / icount) % arrybak[j - 1];
arrybak[j] = (i / icount);
}
else
{
arry[j] = (i / icount)%10;
arrybak[j] = (i / icount);
}
}
else
{
arry[j] = (i / icount);
arrybak[j] = (i / icount);
}
icount = Getint(i.ToString().Length - main);
main++;
}
}

public static int Getint(int i)
{
string count = "1";
for (int j = 1; j < i; j++)
{
count += "0";
}

return Convert.ToInt32(count);
}

 

 

posted on 2014-04-11 23:00  姜汤哥哥  阅读(2864)  评论(0编辑  收藏  举报