[تحدي] الترقيم بوساطة الحروف

عمار الخوالدة • منذ 6 سنوات

السلام عليكم ورحمة الله وبركاته،
 

هذا تحدٍ برمجي يهدف إلى تنشيط التفكير، فمع كثرة حلك للمشاكل باستخدام البرمجة تزداد خبرتك.
 

كيف أشارك؟

  • يمكنك المشاركة بأي لغة برمجة تتقنها
  • لا داعي لوجود واجهة رسومية، استقبل المدخلات عن طريق std input
  • اطرح الكود كإجابة على هذا السؤال واستخدم أدوات المحرر في عالم البرمجة لادخال الكود بشكل منظم.

 

السؤال:

اكتب برنامجا يستقبل عددا صحيحا integer ثم يطبع النتيجة على شكل أحرف كما في ترقيم الأعمدة في برنامج Excel، مثال:
1 ==> A
2==> B

وعند الوصول إلى Z سيتابع البرنامج على النمط الآتي:
 

AA
AB
AC

 

وهكذا.

وإليك بعض المدخلات للتجربة عليها:

 

input output
27 AA
703 AAA
332 LT

 

* توضيح للنتيجة الأولى:

تم ادخال 27 إلى البرنامج، ويجب أن يطبع البرنامج "AA" ، فعندما يبدأ الترقيم في الأحرف من الرقم 1 ( بحيث حرف A يمثل الرقم 1 و B يمثل 2 ...إلخ) فعدد أحرف اللغة الانجليزية 26، بالتالي فالرقم 26 سيقابله الحرف Z ، لكن بما أن برنامج إكسل لا يحتوي على 26 عمود فقط بل يحتوي على أكثر من ذلك بكثير، فإن الرقم 27 سيمثل "AA" كما أن 28 سيمثل "AB" وهكذا.

كلمات دليلية: excel question

ساعد بالإجابة

"إن في قضاء حوائج الناس لذة لا يَعرفها إلا من جربها، فافعل الخير مهما استصغرته فإنك لا تدري أي حسنة تدخلك الجنة."

الإجابات (5)

يوسف العمري • منذ 6 سنوات

هذي بأستخدام جافا 

    static public String numToAA(int t){
              
        if(t <= 26)
            return String.valueOf((char)(t + 64)); 
       
       return numToAA(t/26).concat(numToAA(t % 26));
    }

 

سطام • منذ 6 سنوات
def alphabetize(n):
    if n < 27:
        if n == 0: n = 1
        return chr(n + 64)
    result, remainder = divmod(n, 26)
    return alphabetize(result) + alphabetize(remainder)

طبعاً بلغة بايثون

ESKANDAR • منذ 6 سنوات
        private static string GetChars(double i)
        {
            if (i >= 1)
            {
                i--;
                return GetChars((i - i % 26) / 26) + (char)('A' + i % 26);
            }
            return string.Empty;
        }

ZY = 701

 702 = ZZ

 703 = AAA

C#

NAIF • منذ 6 سنوات
public class Main  {

    private int PointerInAscii = 64;
    private static final int EnglishLetters = 26;
    private StringBuilder str = new StringBuilder();

    public Main(int X){
        while (true){
            if(X > EnglishLetters){
                String N = String.valueOf((char) (PointerInAscii + Mod(X)));
                str.append(N);
                X = David(X);
            }else if(X <= EnglishLetters){
                String N = String.valueOf((char) (PointerInAscii + Mod(X)));
                str.append(N);
                break;
            }
        }
        System.out.println(str.reverse().toString());
    }

    private int Mod(int x){
        if((x % EnglishLetters) == 0)
            return ((x % EnglishLetters) + 1);
        return x % EnglishLetters;
    }

    private int David(int x){
        if((x / EnglishLetters) == 0)
            return ((x / EnglishLetters) + 1);
        return x / EnglishLetters;
    }
}
Moath Aldokhayel • منذ 6 سنوات
<?php
	$file = fopen("test.txt","r");
	$number = fgets($file);
	$letters;
	function Excel($var){
		global $letters;
		$alphabet = range('A','Z');
		if ($var < 27)
			$letters .= $alphabet[$var-1];
		else {
			$temp = $var-1;
			$temp = floor($temp/26);
			$letters .= $alphabet[$var-(26*$temp)-1];
			return Excel($temp);
		}
	}
	Excel($number);
	echo strrev($letters);
	fclose($file);
?>

 

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !