Hirdetés
- Eljött a CPU-k kora az AI-piacon
- Kormányok / autós szimulátorok topikja
- Soundbar, soundplate, hangprojektor
- Régi CPU újrakiadásával ünnepelné a Socket AM4 tizedik évfordulóját az AMD
- 5.1, 7.1 és gamer fejhallgatók
- Vége a régi Kindle-öknek? Az Amazon május 20-án beszünteti támogatásukat
- A jövőben nem csak a gazdagok kiváltsága lehet az Intel CPU-k tuningja
- Házimozi haladó szinten
- Apple MacBook
- E-book olvasók
Új hozzászólás Aktív témák
-
blaces
tag
Hello!
Ismét egy feladathoz kéne segítség.
A feladat két hosszú egész szám összeszorzása (olyannyira hosszú, hogy a long double-kbe se ment bele, ezért stringeztem) 3 napig tartott az összehegesztése...Feladat: Írj programot, amely két hosszú egész számot szoroz össze! Csak pozitív számok fordulnak elő a bemeneten, viszont ezek tetszőlegesen sok 0-val kezdődhetnek. Egy szám legfeljebb 100 számjegyből áll. A két szám két egymást követő sorban helyezkedik el. A program kimenetén nem lehetnek vezető nullák!
Bemenet: Kimenet:
2. eset:
0000789675 19375465800
24536
3. eset:
0000000000000000000000000000000000000000000000000000 0.
35363567#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NUMBER 200
int toInt(char ch) {
return (ch - '0');
}
char toChar(int num) {
return (num + '0');
}
void eraseNewLine(char* str) {
size_t len;
len = strlen(str);
if (len > 0 && str[len-1] == '\n') {
str[len-1] = '\0';
}
}
void eraseNulls(char* str) {
unsigned int count = 0;
size_t i = 0;
size_t len;
char c;
len = strlen(str);
c = str[0];
while (c != '\0') {
c = str[i];
i++;
if (c == '0') {
count++;
} else {
break;
}
}
if (count == len) {
str[0] = '0';
str[1] = '\0';
} else if (count > 0) {
memcpy(str, str+count, (len-count+1));
}
}
void addNulls(int num, char* solution) {
size_t len;
unsigned int i;
len = strlen(solution);
if (num > 0) {
for (i = 0; i < num; i++) {
solution[len+i] = '0';
}
solution[i+len] = '\0';
}
}
void changeStr(char* s1, char* s2) {
char temp[2*MAX_NUMBER];
size_t l1;
size_t l2;
l1 = strlen(s1);
l2 = strlen(s2);
memcpy(temp, s1, l1+1);
memcpy(s1, s2, l2+1);
memcpy(s2, temp, l1+1);
}
void multiplyWithOneChar(char x, char* y, char* solution) {
unsigned int xv = toInt(x);
unsigned int yi;
unsigned int tempi;
unsigned int carry = 0;
char temp[2*MAX_NUMBER];
unsigned int i;
size_t len;
len = strlen(y);
for (i = 0; i < len; i++) {
yi = toInt(y[len-i-1]);
tempi = yi * xv + carry;
if (tempi > 9) {
carry = tempi / 10;
yi = tempi % 10;
} else {
carry = 0;
yi = tempi;
}
temp[i] = toChar(yi);
}
if (carry > 0) {
temp[i] = toChar(carry);
temp[i+1] = '\0';
} else {
temp[i] = '\0';
}
len = strlen(temp);
for (i = 0; i < len; i++) {
solution[i] = temp[len-i-1];
}
solution[i] = '\0';
}
void add(char* y, char* solution) { // solution = solution + y;
unsigned int yi;
unsigned int si;
unsigned int tempi;
unsigned int carry = 0;
char temp[2*MAX_NUMBER];
unsigned int i;
size_t len;
size_t lens;
len = strlen(y);
lens = strlen(solution);
if (lens > len) {
changeStr(y, solution);
len = strlen(y);
lens = strlen(solution);
}
for (i = 0; i < len; i++) {
yi = toInt(y[len-i-1]);
if (i < lens) {
si = toInt(solution[lens-i-1]);
} else {
si = 0;
}
tempi = yi + si + carry;
if (tempi > 9) {
carry = tempi / 10;
yi = tempi % 10;
} else {
carry = 0;
yi = tempi;
}
temp[i] = toChar(yi);
}
if (carry > 0) {
temp[i] = toChar(carry);
temp[i+1] = '\0';
} else {
temp[i] = '\0';
}
len = strlen(temp);
for (i = 0; i < len; i++) {
solution[i] = temp[len-i-1];
}
solution[i] = '\0';
}
void multiply(char* x, char* y, char* solution) {
size_t len;
unsigned int i;
char temp[2*MAX_NUMBER];
eraseNewLine(x);
eraseNewLine(y);
eraseNulls(x);
eraseNulls(y);
solution[0] = '0';
solution[1] = '\0';
len = strlen(y);
for (i = 0; i < len; i++) {
multiplyWithOneChar(y[len-i-1], x, temp);
addNulls(i, temp);
add(temp, solution);
}
}
int main() {
char first[MAX_NUMBER];
char second[MAX_NUMBER];
char solution[2*MAX_NUMBER];
fgets(first, MAX_NUMBER, stdin);
fgets(second, MAX_NUMBER, stdin);
multiply(first, second, solution);
printf("%s\n", solution);
return 0;
}és a második esett az ahol, a második számjegyig végig adja ki a nullákat, az elsőre(ezt nem írtam fentebb) és másodikra jó!
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Parfüm topik
- Eljött a CPU-k kora az AI-piacon
- Kormányok / autós szimulátorok topikja
- Okos otthon - Home Assistant, openHAB és más nyílt rendszerek
- Milyen autót vegyek?
- Autós topik
- Itt a Galaxy S26 széria: az Ultra fejlődött, a másik kettő alig
- Soundbar, soundplate, hangprojektor
- Crimson Desert
- Villanyszerelés
- További aktív témák...
- ÚJ VEZETÉK NÉLKÜLI ROBOTFŰNYÍRÓ GOATBOT H1 RTK GPS AI VISION
- Samsung Galaxy S24 Ultra 5G 512GB, Kártyafüggetlen, 1 Év Garanciával
- Dell Inspiron 5441 Snapdragon X Plus / 16GB 512SSD/ AI PC Brutál akkuidő
- Iphone 11 Pro Max 64gb zöld kártyafüggetlen
- TUF A15 FA507NV 15.6" FHD IPS Ryzen 5 7535HS RTX 4060 16GB 512GB NVMe gar
- BESZÁMÍTÁS! ASRock A520M R5 3600 16GB DDR4 512GB SSD RTX 2060 Super 8GB DarkFlash DK352 Plus 500W
- iPhone 15 Pro 128GB 87% (1év Garancia)
- Apple iPad Pro 12,9 (3. generáció) 64GB Wi-Fi + Cellular használt, karcmentes
- Lenovo IdeaPad 5 Pro - 14" 2.8K 90Hz - i5-1135G7 - 8GB - 512GB SSD - Win11
- Eladó Xiaomi Poco F3 dual 6/128GB / 12 hónap jótállás
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest

