2

私は2つの番号を持っています。

First Number is 2875 &
Second Number is 852145

ここで、3 番目の数値を作成するプログラムが必要です。

Third Number will be 2885725145

ロジックは

First digit of third number is first digit of first number.  
Second digit of third number is first digit of second number.  
Third digit of third number is second digit of first number.  
Fourth digit of third number is second digit of second number;

すぐ。

数字に残りの桁がある場合は、最後に追加する必要があります。

int を string に変換したくありません。

int CreateThirdNumber(int firstNumber, int secondNumber)
{

}

誰でもこの問題の解決策を提案できますか?

4

6 に答える 6

2

int を string に変換したくありません。

なんで?

文字列に変換せずに

モジュラスと除算演算子を使用します。

文字列への変換あり

それらを文字列に変換します。.Substring() を使用して、文字列の値を抽出して追加します。追加された文字列を整数に変換します。

于 2012-05-30T10:20:58.647 に答える
1

最初のちょっとしたアドバイス: intC# で使用する場合、例の値 (2885725145) はより大きくなりますint.MaxValue;(この場合はlongの代わりに使用する必要がありますint)。とにかく、これはあなたの例のコードです。文字列はありません。

        int i1 = 2875;
        int i2 = 852145;
        int i3 = 0;

        int i1len = (int)Math.Log10(i1) + 1;
        int i2len = (int)Math.Log10(i2) + 1;

        i3 = Math.Max(i1, i2) % (int)Math.Pow(10, Math.Max(i1len, i2len) - Math.Min(i1len, i2len));

        int difference = (i1len - i2len); 
        if (difference > 0)
            i1 /= (int)Math.Pow(10, difference);
        else
            i2 /= (int)Math.Pow(10, -difference);

        for (int i = 0; i < Math.Min(i1len, i2len); i++)
            {
            i3 += (i2 % 10) * (int)Math.Pow(10, Math.Max(i1len, i2len) - Math.Min(i1len, i2len) + i * 2);
            i3 += (i1 % 10) * (int)Math.Pow(10, Math.Max(i1len, i2len) - Math.Min(i1len, i2len) + i * 2 + 1);
            i1 /= 10;
            i2 /= 10;
            }
于 2012-05-30T12:19:36.743 に答える
1

ここにあなたに手がかりを与えるビットがあります:

番号を持っているとしましょう2875。まず、長さを決定してから、最初の桁を抽出する必要があります

これは簡単に計算できます。

int iNumber = 2875;
int i = 10;
int iLength = 0;

while (iNumber % i <= iNumber){
    iLength++;
    i *= 10;
}

// iNumber is of length iLength, now get the first digit,
// using the fact that the division operator floors the result
int iDigit = iNumber / pow(10, iLength-1);
// Thats it!
于 2012-05-30T10:32:14.273 に答える
0

文字列を使いたくない理由がわかりません (宿題ですか?)。とにかく、これは別の可能な解決策です:

    long CreateThirdNumber(long firstNumber, long secondNumber)
    {
        long firstN = firstNumber;
        long secondN = secondNumber;
        long len1 = (long)Math.Truncate(Math.Log10(firstNumber));
        long len2 = (long)Math.Truncate(Math.Log10(secondNumber));
        long maxLen = Math.Max(len1, len2);
        long result = 0;
        long curPow = len1 + len2 + 1;
        for (int i = 0; i <= maxLen; i++)
        {
            if (len1 >= i)
            {
                long tenPwf = (long)Math.Pow(10, len1 - i);
                long firstD = firstN / tenPwf;
                firstN = firstN % tenPwf;
                result = result + firstD * (long)Math.Pow(10, curPow--);
            }
            if (len2 >= i)
            {

                long tenPws = (long)Math.Pow(10, len2 - i);
                long secondD = secondN / tenPws;
                result = result + secondD * (long)Math.Pow(10, curPow--);
                secondN = secondN % tenPws;
            }
        }
        return  result;
    }
于 2012-05-30T12:59:33.750 に答える
0
#include <stdio.h>

long long int CreateThirdNumber(int firstNumber, int secondNumber){
    char first[11],second[11],third[21];
    char *p1=first, *p2=second, *p3=third;
    long long int ret;

    sprintf(first,  "%d", firstNumber);
    sprintf(second, "%d", secondNumber);
    while(1){
        if(*p1)
            *p3++=*p1++;
        if(*p2)
            *p3++=*p2++;
        if(*p1 == '\0' && *p2 == '\0')
            break;
    }
    *p3='\0';
    sscanf(third, "%lld", &ret);
    return ret;
}
int main(){
    int first = 2875;
    int second = 852145;
    long long int third;
    third = CreateThirdNumber(first, second);
    printf("%lld\n", third);

    return 0;
}
于 2012-05-30T16:06:17.343 に答える
0

これはそれを解決します:

#include <stdio.h>

int main(void)
{

  int first = 2875,second = 852145;
  unsigned int  third =0;
  int deci,evenodd ,tmp ,f_dec,s_dec;

  f_dec = s_dec =1;
  while(first/f_dec != 0 || second/s_dec != 0) {
    if(first/f_dec != 0) {
       f_dec *=10;

    }
    if( second/s_dec != 0) {
      s_dec *= 10;
    }

  }
  s_dec /=10; f_dec/=10;


  deci = s_dec*f_dec*10;


  evenodd =0;tmp =0;
  while(f_dec != 0 || s_dec !=0 )  {
    if(evenodd%2 == 0 && f_dec !=0 ) {
      tmp = (first/f_dec);
      first -=(tmp*f_dec);

      tmp*=deci;

      third+=tmp;
      f_dec/=10;
      deci/=10;
    }

    if(evenodd%2 != 0 && s_dec != 0) {
      tmp= (second/s_dec);
      second -=(tmp*s_dec);
      //printf("tmp:%d\n",tmp);

      tmp*=deci;

      third += tmp;
      s_dec/=10;
      deci/=10;
    }

    evenodd++;
  }
  printf("third:%u\ncorrct2885725145\n",third);
return 0;

}

出力:

third:2885725145
corrct2885725145
于 2012-05-30T14:20:46.567 に答える