2012-12-06 17 views
5

मेरे पास 10 अंकों का पूर्णांक है। मुझे उस पूर्णांक का 7 वां अंक प्राप्त करने की आवश्यकता है।एक पूर्णांक से सातवें अंक प्राप्त करें

मुझे एक पूर्णांक के पहले अंक प्राप्त करने के लिए गणितीय समाधान मिला है।

var myDigit = 2345346792; 

var firstDigit = Math.Abs(myDigit); 
while (firstDigit >= 10) 
{ 
    firstDigit /= 10; 
} 

मैं अपनेडिगेट से सातवें अंक कैसे प्राप्त कर सकता हूं? मैं स्ट्रिंग करने और एक सबस्ट्रिंग करने के लिए कास्टिंग से बचने की कोशिश कर रहा हूँ। मैं सातवें अंक प्राप्त करने के गणितीय संस्करण को देखना चाहता हूं।

कोई भी?

+1

पहचानकर्ता अंक के साथ शुरू नहीं कर सकते हैं। –

उत्तर

10
int getSeventhDigit(int number) 
{ 
    while(number >= 10000000) 
     number /= 10; 

    return number % 10; 
} 

यह 7 या उससे कम अंकों के साथ संख्याओं का अंतिम अंक लेगा।

8 या अधिक अंकों वाले नंबरों के लिए, यह 10 तक विभाजित होगा जब तक कि संख्या 7 अंकों लंबी न हो, फिर अंतिम अंक लें।

+0

धन्यवाद! यह अच्छी तरह से काम करता है .... और मैंने गणित का हिस्सा निकाला। मैं भूल गया कि कोड दाएं से बाएं पढ़ता है, इसलिए यह वास्तव में मुझे आवश्यक से चौथा अंक था। – codingjoe

+0

एक साइड प्रश्न: मैं एक जोड़ी के रूप में 5 वें और 6 वें नंबर को कैसे प्राप्त करूं? – codingjoe

+1

5 वें और 6 वें अंक प्राप्त करने के लिए, जबकि लूप में '1000000' तक संख्या बदलें, और' संख्या% 100 'वापस करें। यह 0 से 99 तक एक नंबर लौटाएगा। –

2

कुछ इस तरह (सी कोड है, लेकिन आसानी से पोर्टेबल होना चाहिए):

if (n < 1000000) 
    return 0;  // no 7th digit 
while (n > 9999999) 
    n /= 10;   // now in the range [1,000,000..9,999,999] 
return n % 10; 
+0

एक साइड प्रश्न: मैं एक जोड़ी के रूप में 5 वें और 6 वें नंबर को कैसे प्राप्त करूं? – codingjoe

10
var seventh_digit = (myDigit/1000000) % 10; 
+2

+1। हां, न ही लूप की आवश्यकता है। –

+0

एक साइड सवाल: मैं एक जोड़ी के रूप में 5 वें और 6 वें नंबर को कैसे प्राप्त करूं? – codingjoe

+0

'varenth_and_sixth = (myDigit/10000)% 100;' –

3

यह मानते हुए कि "zeroth अंकों" कम से कम महत्वपूर्ण अंकों है, यह आपको क्या करना चाहिए:

public static int nthDigit(int value , int n) 
    { 
     if (n < 0) throw new ArgumentException(); 
     if (value < 0) throw new ArgumentException() ; 

     while (n-- > 0) 
     { 
      value /= 10 ; 
     } 

     int digit = value % 10 ; 
     return digit ; 
    } 
+0

अच्छा अब इसे int के लिए एक एक्सटेंशन विधि के रूप में लिखें और यह सही है :-) – Timothy

4

जबकि बिना गणितीय समाधान लूप:

int myDigit = 2345346792; 

var seventh = (myDigit/1000000) % 10; 

//result should be 5, your seventh digit from the right 
+0

+1। हां, न ही लूप की आवश्यकता है। –

+0

एक साइड प्रश्न: मैं एक जोड़ी के रूप में 5 वें और 6 वें नंबर को कैसे प्राप्त करूं? – codingjoe

+0

@ कोडिंगजो (myDigit/10000)% 100 – Roast

3

आम तौर पर, आप अंक से एक (शून्य आधारित) सरणी बना सकते हैं:

uint myDigit = 2345346792; 

int[] digits = new int[10]; 
for (int i = 9; i >= 0; i--) 
{ 
    digits[i] = (int)(myDigit % 10); 
    myDigit /= 10; 
} 

कि जो कुछ भी हेरफेर तुम क्या करना चाहते हैं के लिए उपयोगी होना चाहिए।

3
var nthDigit = (int)((number/Math.Pow(10, nth - 1)) % 10); 

जहां nth संख्या का n-th अंक है।

0

यह पुराना प्रतीत हो सकता है, लेकिन मैं संख्याओं की एक स्ट्रिंग से विशिष्ट अंक प्राप्त करना चाहता था और इनमें से अधिकतर समाधान (और अन्य जिन्हें मैंने पाया) की कमी थी। तो ... मैंने एक कामकाज का फैसला किया और संख्या को एक स्ट्रिंग में परिवर्तित कर दिया और फिर स्ट्रिंग के पात्रों को खींच लिया, उन्हें वापस एक int में परिवर्तित कर दिया। मुझे पता है कि यह बहुत कुशल नहीं है, लेकिन छोटी परियोजनाओं के लिए मैं खुद को दक्षता से चिंता नहीं करता हूं। मुझे आशा है कि यह एक ऐसी ही समाधान की तलाश में किसी को भी मदद करता है

long number = 5559876543; 
string s = "" + number; 

int areaCode = int.Parse(s.Substring(0, 3)); 
int prefix = int.Parse(s.Substring(3, 3)); 
int suffix = int.Parse(s.Substring(6, 4)); 

:

मेरे काम के लिए, मैं विशेष रूप से फोन नंबर के साथ काम कर रहा था, इसलिए यहाँ मेरी कोड है।