Skip to content

ข้อสอบท้ายค่าย 1 ศูนย์ สอวน.กรุงเทพมหานคร ปี 2566 ข้อที่ 1


Problem

สรุปโจทย์

รับค่าจำนวนเต็ม 3 ตัว \(a, b, x\) แล้วให้แสดงผลค่าในหลักที่ \(x\) ของผลคูณระหว่าง \(a, b\) โดยถ้าไม่มี (\(ab\) มีจำนวนหลักไม่ถึง \(x\) หลัก) ให้พิมพ์ออกมาเป็น '_'

สิ่งที่ต้องทำ

เขียนโค้ดเพื่อแสดงผลค่าในหลักที่ \(x\) ตามที่โจทย์กำหนด

ตัวอย่าง

Input Output
25
30
2
5
380
458
3
4
3456
986
5
6
239
32
5
_

Prerequisites

  • C/C++ Basics

Solution

วิธีทำ

เมื่อหาผลคูณ \(ab\) มาได้แล้ว เราจะตรวจสอบก่อนว่า ความยาว (จำนวนหลัก) ถึง \(x\) มั้ย

  • ถ้าไม่ถึง พิมพ์คำตอบออกมาเลย ('_')
  • ถ้าถึง ให้ loop เพื่อหาคำตอบ

Code

posn1_66_bkk_p1.cpp
#include <stdio.h>

int main(){
    int a, b, x;
    scanf("%d %d %d", &a, &b, &x);
    int c = a * b, cc = c, l = 0;

    // นับจำนวนหลักในตัวเลข
    while (cc > 0) {
        cc /= 10;
        l++;
    }

    // ถ้าจำนวนหลักไม่พอ ก็พิมพ์ '_' แล้วหยุดการทำงานทันที
    if (x > l) {
        printf("_\n");
        return 0;
    }

    // คำนวณต่อ หาหลักที่ x
    for (int i = 1; i <= l - x; i++) {
        c /= 10;
    }
    printf("%d\n", c % 10);
}

หากมีข้อสงสัย ไว้ใต้ post ได้เลยนะครับ หรือพิมพ์ inbox มาได้เลยนะครับ 🙇‍♂️🙇‍♂️