useless28

Untitled

Aug 1st, 2019
187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.94 KB | None | 0 0
  1. ///////////////////////
  2. //tu mas .exe
  3. //http://leteckaposta.cz/564010027
  4. ///////////////////////
  5.  
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11.  
  12. namespace DlouhyCisla
  13. {
  14.     class Program
  15.     {
  16.         static void Main(string[] args)
  17.         {
  18.             Console.WriteLine("==============================================\n      Soucet a soucin fakt velkych cisel     \n==============================================\n");
  19.  
  20.             List<int> prvniCislo = VytvorZeVstupu(),
  21.                       druheCislo = VytvorZeVstupu(),
  22.                       soucet,
  23.                       soucin;
  24.  
  25.             //prvni je to kratsi
  26.             soucet = (prvniCislo.Count < druheCislo.Count) ? SoucetVelkychCisel(prvniCislo, druheCislo)
  27.                                                            : SoucetVelkychCisel(druheCislo, prvniCislo);
  28.            
  29.             soucin = (prvniCislo.Count > druheCislo.Count) ? SoucinVelkychCisel(prvniCislo, druheCislo)
  30.                                                            : SoucinVelkychCisel(druheCislo, prvniCislo);
  31.  
  32.             Console.ForegroundColor = ConsoleColor.Green;
  33.             Console.Write("Soucet je:        ");
  34.             Tisk(soucet);
  35.  
  36.             Console.ForegroundColor = ConsoleColor.Red;
  37.             Console.Write("\nSoucin je:        ");
  38.             Tisk(soucin);
  39.             Console.ReadKey();
  40.         }
  41.  
  42.         static List<int> SoucetVelkychCisel(List<int> prvniList, List<int> druhyList)
  43.         {
  44.             List<int> vysledek = new List<int>();
  45.             int soucet = 0, prebytek = 0, j = 0,
  46.                 rozdilDelek = druhyList.Count - prvniList.Count;
  47.  
  48.             //Srovnani delek cisel, predpokladame ze 1. cislo je vzdy delsi
  49.             for (int i = 0; i < rozdilDelek; i++)                                           //na zacatek kratsiho cisla pridam nuly tak,
  50.                 prvniList.Insert(0, 0);                                                     //aby byla stejne dlouha. ze jo, 0 + neco = neco, a pak scitam
  51.  
  52.             //Scitani
  53.             for (int i = prvniList.Count - 1; i >= 0; i--)
  54.             {
  55.                 soucet = (prvniList[i] + druhyList[i] + prebytek) % 10;                     //cislice kterou zapisu
  56.                 prebytek = (prvniList[i] + druhyList[i] + prebytek) / 10;                   //prebytek 10
  57.                 vysledek.Insert(0, soucet);                                                 //vlozim na ZACATEK
  58.             }
  59.  
  60.             //posledni cislice
  61.             if (prebytek > 0)                                                               //pokud i po tomto souctu neco zbyde, pridam to na uplny zacatek
  62.                 vysledek.Insert(0, prebytek);
  63.  
  64.             //smazu pridane nuly
  65.             while (prvniList[j] == 0)
  66.                 prvniList.RemoveAt(j);                                              
  67.  
  68.             return vysledek;
  69.         }
  70.  
  71.        
  72.  
  73.         //predpokladame ze prvni je delsi
  74.         static List<int> SoucinVelkychCisel(List<int> prvni, List<int> druhe)
  75.         {
  76.             List<int> vysledekJednoho = new List<int>();
  77.  
  78.             List<List<int>> mezivysledky = new List<List<int>>();
  79.             int prebytek = 0, rozdil = druhe.Count - prvni.Count;
  80.  
  81.             //Budu nasobit ciframi v druhem cisle, pujdu zprava doleva
  82.             for (int i = druhe.Count - 1; i >= 0 ; i--)
  83.             {
  84.                 //1 cislici v druhem cisle nasobim vsechny cislice 1. cisla
  85.                 for (int j = prvni.Count - 1; j >= 0; j--)
  86.                 {
  87.                     //za zacatek cisla (vlevo) pridam druhou cislici toho, co vznikne po vynasobeni cifer obou cisel
  88.                     vysledekJednoho.Insert(0, ((prvni[j] * druhe[i]) + prebytek) % 10);
  89.  
  90.                     //z te prvni cislice vypocitam zbytek
  91.                     prebytek = ((prvni[j] * druhe[i]) + prebytek) / 10;
  92.                 }
  93.  
  94.                 //Tady prictu pripadny prebytek po vynasobeni vsećh cifer tim 1 cislem
  95.                 if (prebytek > 0)                                                          
  96.                     vysledekJednoho.Insert(0, prebytek);
  97.  
  98.                 //posunuti vsech cislic, posunu o pocet_hotovych_nasobeni - 1. Posunuju se kvuli souctum, a to tak, ze na konec pridam nuly.
  99.                 for (int k = druhe.Count - 1; k > i; k--)                                  
  100.                     vysledekJednoho.Add(0);
  101.  
  102.                 //ulozim si posunuty vysledek toho soucinu (1 cislice s celym druhym cislem) do mezivysledku
  103.                 mezivysledky.Add(vysledekJednoho);
  104.  
  105.                 //zacnu znova o cifru dal v druhem cisle
  106.                 vysledekJednoho = new List<int>();
  107.  
  108.                 ////nezapomen vynulovat prebytek ! ! !
  109.                 prebytek = 0;                                                              
  110.             }
  111.  
  112.             //postupne scitam vsechny mezivysledky
  113.             vysledekJednoho = mezivysledky[0];
  114.             for (int i = 1; i < mezivysledky.Count; i++)                                    
  115.             {
  116.                 vysledekJednoho = SoucetVelkychCisel(vysledekJednoho, mezivysledky[i]);
  117.             }
  118.  
  119.             return vysledekJednoho;
  120.         }
  121.  
  122.         static List<int> VytvorZeVstupu()
  123.         {
  124.             Console.Write("Zadej cele cislo: ");
  125.             string vstup = Console.ReadLine();
  126.  
  127.             List<int> cislo = new List<int>();
  128.             for (int i = 0; i < vstup.Length; i++)
  129.             {
  130.                 //Pokud se neco nepodari prevest, vratim prazdny list, tim padem se nic nespocita
  131.                 if (!int.TryParse(vstup[i].ToString(), out int prevedene))
  132.                     return new List<int>();
  133.  
  134.                 cislo.Add(prevedene);
  135.             }
  136.             return cislo;
  137.         }
  138.  
  139.         static void Tisk(List<int> sez)
  140.         {
  141.             foreach (int i in sez)
  142.                 Console.Write(i);
  143.         }
  144.     }
  145. }
Advertisement
Add Comment
Please, Sign In to add comment