2016-10-27 13 views
0

数値の特定の数字をチェックしたいと思います。その結果に基づいてメッセージが表示されます。数字の特定の数字を確認してください

チェックする桁数:7と9 出力:7の場合はS、9の場合はN(注文は重要)と7または9の入力番号を印刷します。 EX用

入力数:75出力:S(含ま7)

入力番号:96出力:N(含ま9)

入力番号:79出力:SN

入力数:97出力:NS

入力番号:67849出力:SN

入力番号:59587出力:NS

入力番号:873579出力:SSN

入力数:135出力:

135は、私が試した次のアプローチ

string output = string.Empty; 
     int n = 0; 
     while(number > 0) 
     { 
      n = number % 10; 
      number = number/10; 
      if(n == 7) 
      { 
       output += "S"; 
      } 
      if(n == 9) 
      { 
       output += "N"; 
      }     

     } 

     return string.IsNullOrEmpty(output) ? number.ToString() : output; 

しかし、この取り組んでいます1桁の数字が含まれている場合のみ(例:17,91の場合)

複数の数字がある場合は機能しません(例:769,957)

これを達成する方法(オーダーは重要です)。事前

+0

そのパズルタグは "使用しない" の明示的なノートを持っています。あなたの質問をよりよく説明するものを使用したいかもしれません。 –

+0

数値で特定の結果を取得したいだけの理由で計算を行う理由は何ですか? – Badiparmagi

+0

プログラムは '135'の場合を除いてあなたが書いたことを正確に行います。なぜなら、' number'はメソッドの最後に常に '0'で出力が逆転しているからです([fiddle here](https://dotnetfiddle.net/ウィジェット/ mAqqX1))。残りのコードを含め、[mcve]を提供してください。 –

答えて

2

私は文字列に最初に変換するので、数学計算は不要で、注文を保存します。

string numberStr = number.ToString(); 
string result = null; // no need to use StringBuilder, because size won't be big 
foreach (char c in numberStr) 
{ 
    switch (c) 
    { 
     case '7': 
      result +='S'; 
      break; 
     case '9': 
      result +='N'; 
      break; 
    } 
} 
return string.IsNullOrEmpty(result) ? numberStr : result; 
1

にあなたは、文字列の中にあなたの番号を変換して、反復して、7を見つけたときあなたはSを印刷しますと、9 N

double myNUmber = 769.957; 
       string myString = myNUmber.ToString(); 
       string output = string.Empty; 
       for (int i = 0; i < myString.Length; i++) 
       { 
        if (myString[i] == '7') 
         output += "S"; 
        else if (myString[i] == '9') 
         output += "N"; 

       } 
1

で簡単な方法はに番号を変換することであることができ

感謝最初の文字列。

var numberStr = number.ToString(); 
var e = numberStr.Select(x => x == '7' ? "S" : x == '9' ? "N" : ""); 
var output = string.Join("", e); 
return string.IsNullOrEmpty(output) ? numberStr : output; 
0

私はあなたのメソッドを変更しました。もう1つこれは、パフォーマンスを向上させるためにstringの代わりにStringBuilderを使うべきです。あなたが望むならintの代わりに長く渡すことができます。

public static string ProcessValidImport(int number) 
{ 
    StringBuilder output = new StringBuilder(); 
    int n = number; 
    while (number > 0) 
    { 

     if (number % 10 == 7) 
     { 
      output.Append("S"); 
     } 
     if (number % 10 == 9) 
     { 
      output.Append("N"); 
     } 
     number = number/10; 
    } 

    return (output == null || output.Length == 0) ? n.ToString() : Reverse(output.ToString()); 
} 

public static string Reverse(string s) 
{ 
    char[] charArray = s.ToCharArray(); 
    Array.Reverse(charArray); 
    return new string(charArray); 
} 

私はOPソリューションを試して、彼はまた、文字列を尊敬する必要があります。

SとNの代わりにSEVENとNINEが必要な場合は、以下のソリューションを使用できます。

public static string ProcessValidImport(int number) 
{ 
    List<string> output = new List<string>(); 
    int n = number; 
    while (number > 0) 
    { 

     if (number % 10 == 7) 
     { 
      output.Add("SEVEN"); 
     } 
     if (number % 10 == 9) 
     { 
      output.Add("NINE"); 
     } 
     number = number/10; 
    } 
    output.Reverse(); 
    return (output == null || output.Count == 0) ? n.ToString() : string.Join("", output.ToArray()); 
} 
+0

Hey Vivek、ありがとうsolution.But私のリアルタイムソリューションの出力には複数の文字(7と9)があります。簡単にするために、私はSとNとして書いた – Santosh

+0

逆のため、出力はNEVESとENINこのエラーのために修正することができます – Santosh

+0

はい、どうしてですか? 'S'と 'N'の代わりに「SEVEN」と「NINE」を追加してから配列を逆にして文字列に変換してください –

1
using System; 
using System.Linq; 

namespace Demo 
{ 
    class Program 
    { 
     static void Main() 
     { 
      Console.WriteLine(demo(75)); 
      Console.WriteLine(demo(96)); 
      Console.WriteLine(demo(79)); 
      Console.WriteLine(demo(97)); 
      Console.WriteLine(demo(67849)); 
      Console.WriteLine(demo(59587)); 
      Console.WriteLine(demo(873579)); 
      Console.WriteLine(demo(135)); 

     } 

     static string demo(int number) 
     { 
      string result = new string(
       number.ToString().Where(digit => digit == '7' || digit == '9') 
       .Select(digit => (digit == '7') ? 'S' : 'N') 
       .ToArray()); 

      return result.Length > 0 ? result : number.ToString(); 
     } 
    } 
} 

代替#1:

static readonly string[] lookup = {"", "", "", "", "", "", "", "S", "", "N"}; 

static string demo(int number) 
{ 
    string txt = number.ToString(); 
    string result = string.Concat(txt.Select(digit => lookup[digit-'0'])); 
    return result.Length > 0 ? result : txt; 
} 

代替#2:

static string demo(int number) 
{ 
    string txt = number.ToString(); 
    string result = string.Concat(txt.Select(digit => "  S N"[digit-'0'])).Replace(" ", ""); 
    return result.Length > 0 ? result : txt; 
} 

代替#3(技術的に "ワンライナー" 私はそれを分割)

static string demo(int number) 
{ 
    return new string(
     number.ToString() 
     .Select(digit => "S8N"[digit - '0']) 
     .GroupBy(digit => digit == 'S' || digit == 'N') 
     .OrderBy(g => g.Key) 
     .Last() 
     .ToArray()); 
} 
0

最終的に数字を読み取っているため、結果の文字列が後ろになります。 (997NNSを与えることになっているとき、SNNを与える)の代わりにこれを使用しての

output += "S"; //or "N" 

使用:

output = "S" + output; // or "N" 
関連する問題